Biblioteki C/C++
intrusive_ptr
[szablon klasy] Przechowuje wskaźnik do obiektu, który posiada wbudowany licznik odniesień do obiektu.Składnia
#include <boost/intrusive_ptr.hpp>
template < class T >
class intrusive_ptr
{
};
Opis szczegółowy
Szablon klasy przechowujący wskaźnik do obiektu, który posiada wbudowany licznik odniesień do obiektu. Każda nowa instancja
intrusive_ptr zwiększa licznik odniesień do obiektu poprzez wywołanie funkcji
intrusive_ptr_add_ref do której przekazywany jest wskaźnik obiektu poprzez argument. Analogicznie, gdy
intrusive_ptr jest niszczony, wywołuje funkcję
intrusive_ptr_release. Funkcja
intrusive_ptr_release jest odpowiedzialna za niszczenie obiektu gdy licznik odniesień do obiektu wyniesie zero.
Użytkownik musi dostarczyć odpowiednie definicje funkcji
intrusive_ptr_add_ref oraz
intrusive_ptr_release.
Zastosowanie
Szablon
intrusive_ptr ma praktyczne zastosowanie wtedy gdy obiekt może zostać zniszczony przez samego siebie. W pozostałych przypadkach zazwyczaj stosuje się szablon
shared_ptr.
Dodatkowe informacje
Niniejsze pojęcie jeszcze nie zostało wyczerpująco przez nas opracowane. Więcej informacji na temat niniejszego hasła znajdziesz pod adresem
http://www.boost.org/doc/libs/1_47_0/libs/smart_ptr/intrusive_ptr.html.
Przykład
#include <cstdio>
#include <boost/intrusive_ptr.hpp>
class CObiekt
{
public:
CObiekt()
: m_iRefCount( 1 )
{
printf( "CObiekt()\n" );
}
void AddRef()
{
m_iRefCount++;
printf( "AddRef = %d\n", m_iRefCount );
}
void Release()
{
--m_iRefCount;
printf( "Release = %d\n", m_iRefCount );
if( m_iRefCount == 0 )
delete this;
}
~CObiekt()
{
printf( "~CObiekt()\n" );
}
private:
int m_iRefCount;
};
void intrusive_ptr_add_ref( CObiekt * pObiekt ) { pObiekt->AddRef(); }
void intrusive_ptr_release( CObiekt * pObiekt ) { pObiekt->Release(); }
int main()
{
boost::intrusive_ptr < CObiekt > pObiekt( new CObiekt );
printf( "%p\n", pObiekt.get() );
pObiekt->Release();
printf( "%p\n", pObiekt.get() );
pObiekt.reset();
printf( "%p\n", pObiekt.get() );
return 0;
}
Standardowe wyjście programu:
CObiekt()
AddRef = 2
00395BD0
Release = 1
00395BD0
Release = 0
~CObiekt()
00000000
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.