Język C++
auto_ptr
[szablon klasy] Przechowuje wskaźnik na zaalokowany obiekt zapewniając jednocześnie jego zwolnienie z chwilą wywołania destruktora.Składnia
#include <memory>
namespace std
{
template < class Type >
class auto_ptr
{
};
}
Parametry szablonu
Opis szczegółowy
Przechowuje wskaźnik na zaalokowany obiekt zapewniając jednocześnie jego zwolnienie z chwilą wywołania destruktora. Typ wskaźnika określa parametr szablonu. Adres przechowywany przez wskaźnik musi wynosić
NULL lub być poprawnie zaalokowanym wskaźnikiem na obiekt, któremu pamięć została przydzielona przy pomocy operatora
new.
Należy pamiętać, że obiekt
std::auto_ptr zachowuje się tak jakby był on właścicielem dynamicznie zaalokowanego obiektu, a więc zwolni on dynamicznie zaalokowany obszar pamięci z chwilą wywołania destruktora lub metody
reset.
W przypadku wykonania operacji przypisania bądź wywołania konstruktora kopiującego, obiekt źródłowy przekazuje prawo własności do obiektu docelowego. Przetransferowany wskaźnik zostanie ustawiony na wartość
NULL w obiekcie źródłowym. Jeżeli w obiekcie docelowym istniał zaalokowany dynamicznie obiekt to zostanie on automatycznie zwolniony zanim nastąpi operacja przypisania.
Uwaga!
Nie należy tworzyć kilku obiektów std::auto_ptr, które przejmują prawo własności do tego samego obiektu.
|
Przykład
#include <cstdio>
#include <memory>
class CDane
{
public:
CDane( int x )
: m_x( x )
{ printf( "CDane(%d)\n", m_x ); }
~CDane() { printf( "~CDane(%d)\n", m_x ); }
const int & dajX() const { return m_x; }
private:
int m_x;
};
typedef CDane TypDanych;
void wypisz( const char * sOpis, const std::auto_ptr < TypDanych >& p )
{
if( p.get() )
printf( "%s = 0x%p | wartosc = %d\n", sOpis, p.get(), p->dajX() );
else
printf( "%s = 0x%p | NULL\n", sOpis, p.get() );
}
int main()
{
std::auto_ptr < TypDanych > p1( new TypDanych( 5 ) );
std::auto_ptr < TypDanych > p2;
wypisz( "p1", p1 );
wypisz( "p2", p2 );
printf( "p2 = p1\n" );
p2 = p1;
wypisz( "p1", p1 );
wypisz( "p2", p2 );
printf( "p2 = p1\n" );
p2 = p1;
wypisz( "p1", p1 );
wypisz( "p2", p2 );
return 0;
}
Standardowe wyjście programu:
CDane(5)
p1 = 0x005b0f18 | wartosc = 5
p2 = 0x00000000 | NULL
p2 = p1
p1 = 0x00000000 | NULL
p2 = 0x005b0f18 | wartosc = 5
p2 = p1
~CDane(5)
p1 = 0x00000000 | NULL
p2 = 0x00000000 | NULL
Linki zewnętrzne
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.