Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Opracował: Piotr DejaVu Szawdyński
Biblioteki C/C++

scoped_ptr

[szablon klasy] Automatycznie zwalnia pamięć zaalokowaną przy pomocy operatora
new
 przy wyjściu ze scope-a.

Składnia

C/C++
#include <boost/scoped_ptr.hpp>
namespace boost
{
   
    template < class T >
    class scoped_ptr // noncopyable
    {
    };
   
}

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 » boostscoped_array.

Przykład

C/C++
#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_arrayAutomatycznie zwalnia pamięć zaalokowaną przy pomocy operatora
new[]
 przy wyjściu ze scope-a. (szablon klasy)

Linki zewnętrzne