2009-05-26 4 views

Antwort

8

Boost - die weak_ptr hat einige nette Features, die es sicher zu bedienen, wenn Sie auch verwenden shared_ptr. Sie behalten einen weak_ptr Verweis auf eine Instanz, die von shared_ptr Lebensdauer verwaltet wird. Wenn Sie die zugrunde liegende Instanz verwenden müssen, konvertieren Sie sie unter Verwendung des Konstruktors der Klasse shared_ptr oder lock in eine shared_ptr-Instanz. Die Operation schlägt fehl, wenn die zugrunde liegende Instanz gelöscht wurde. Die Verwendung ist fadensicher in der gleichen Weise wie die shared_ptr Klasse:

shared_ptr<int> p(new int(5)); 
weak_ptr<int> q(p); 

// some time later 

if(shared_ptr<int> r = q.lock()) 
{ 
    // use *r 
} 
+0

Danke. Ich war mir nicht bewusst, dass weak_ptr dieses Verhalten hatte. Ich frage mich jedoch, wie viel ich für das unnötige Referenzzählverhalten bezahle. Wie auch immer, Ihre Antwort war zuerst, denke ich. Als am besten markieren. –

6

"boost :: weak_ptr" funktioniert wirklich gut mit "boost :: shared_ptr" (auch in tr1 verfügbar)

Verwandte Themen