Biblioteki C/C++
scoped_ptr
[szablon klasy] Automatycznie zwalnia pamięć zaalokowaną przy pomocy operatora new
przy wyjściu ze scope-a.Składnia
#include <boost/scoped_ptr.hpp>
namespace boost
{
template < class T >
class scoped_ptr
{
};
}
Opis szczegółowy
Szablon klasy, który automatycznie zwalnia pamięć zaalokowaną przy pomocy operatora
new
. Pamięć jest zwalniana przy wychodzeniu z zasięgu zmiennej (przy tzw. wyjściu ze scope-a). Szablon
scoped_ptr gwarantuje, że pamięć zaalokowana dynamicznie przy pomocy operatora
new
zostanie zawsze zwolniona. Pamięć jest zwalniana zarówno przy wywołaniu metody
reset jak również z chwilą wywołania destruktora szablonu klasy
scoped_ptr.
Szablon
scoped_ptr jest
noncopyable co oznacza, że nie można kopiować wskaźnika przechowywanego przez niniejszy szablon. Ze względu na prostą budowę szablonu
scoped_ptr, jego implementacja jest równie szybka jak niskopoziomowa praca ze wskaźnikami oraz zajmuje tyle samo miejsca co zwykły wskaźnik.
Szablon
scoped_ptr nie może być używany w standardowych kontenerach C++ (wynika to z własności
noncopyable).
Szablon
scoped_ptr nie potrafi poprawnie przechowywać wskaźnika na dynamicznie zaalokowaną tablicę - do tego celu służy szablon
scoped_array.
Przykład
#include <cstdio>
#include <boost/scoped_ptr.hpp>
class CObiekt
{
public:
CObiekt( int iIdentyfikator )
: m_iIdentyfikator( iIdentyfikator )
{
printf( "\tCObiekt(%d)\n", m_iIdentyfikator );
}
~CObiekt()
{
printf( "\t~CObiekt(%d)\n", m_iIdentyfikator );
}
private:
int m_iIdentyfikator;
};
int main()
{
printf( "[Etap 1]:\n" );
boost::scoped_ptr < CObiekt > ptr( new CObiekt( 1 ) );
printf( "[Etap 2]:\n" );
ptr.reset();
printf( "[Etap 3]:\n" );
ptr.reset( new CObiekt( 2 ) );
printf( "[Etap 4]:\n" );
{
printf( "[Etap 5]:\n" );
boost::scoped_ptr < CObiekt > ptr2( new CObiekt( 3 ) );
printf( "[Etap 6]:\n" );
}
printf( "[Etap 7]:\n" );
return 0;
}
Standardowe wyjście programu:
[Etap 1]:
CObiekt(1)
[Etap 2]:
~CObiekt(1)
[Etap 3]:
CObiekt(2)
[Etap 4]:
[Etap 5]:
CObiekt(3)
[Etap 6]:
~CObiekt(3)
[Etap 7]:
~CObiekt(2)
Zagadnienia powiązane
scoped_array | Automatycznie zwalnia pamięć zaalokowaną przy pomocy operatora new[] przy wyjściu ze scope-a. (szablon klasy) |
---|
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.