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.