Boost weak_ptr

Da Beyond the C++ Standard Library: An Introduction to Boost, di Björn Karlsson.

weak_ptr

Un weak_ptr é un osservatore di un shared_ptr. Quando lo shared_ptr rilascia la risorsa associata, mette a null il puntatore associato a weak_ptr. In questo modo weak_ptr non assume la proprietà della risorsa, e non rischia di detenere un puntatore che potrebbe rimanere disassociato alla risorsa stessa.

Il metodo lock() di waek_ptr permette di ottenere un shared_ptr da un lock_ptr, gestendo il reference count come atteso.

Ecco un esempio per weak_ptr:

#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/weak_ptr.hpp>

using namespace std;
using namespace boost;

int main() {

boost::weak_ptr<int> w;
if(w.expired())
cout << "1: weak_ptr initialized as expired" << endl;

{
shared_ptr<int> p(new int);
if(p.use_count()==1)
cout << "2: reference count for shared_ptr set to 1" << endl;
w=p;
if(p.use_count()==1)
cout << "3: weak_ptr observe without changing ref count" << endl;

shared_ptr<int> p2(w);
if(p.use_count()==2)
cout << "4: creating a shared_ptr from a weak_ptr" << endl;
}
if(w.expired())
cout << "5: weak_ptr expires" << endl;

shared_ptr<int> p3=w.lock();
if(p3 == false)
cout << "6: shared_ptr from expired weak_ptr is not initialized" << endl;
}

Nessun commento:

Posta un commento