2012-02-05 17 views
7

當使用shared_ptr時,我應該只使用shared_ptr聲明一次或聲明shared_ptr無處不在我通過它?當使用shared_ptr時,我應該只使用shared_ptr聲明一次,或者在我傳遞它的任何地方聲明shared_ptr?

所以在我新了實例的功能我把它包在一個shared_ptr但是當我從函數返回它,我還可以返回shared_ptr或者,在shared_ptr使用get(),只返回一個正常的指針。

所以我的問題是,我應該只使用shared_ptr<myType>當我新的實例,然後傳遞正常指針或我應該通過shared_ptr<myType>到處?

回答

5

創建shared_ptr沒有灌輸及其指針對象神通。魔術全部在shared_ptr —及其副本—本身。如果你停止使用它,你會失去你的參考計數;更糟的是,因爲你用它在某些時候,該對象將被自動時,你不要指望它刪除。

整點shared_ptr是你知道你的物體在你還在某處使用時不會被破壞。

在下面:

T* foo() { 
    shared_ptr<T> sp(new T()); 
    return sp.get(); 
    //^the only shared_ptr<T> referencing the obj is dead; 
    // obj is deleted; 
    // returned pointer invalid before you can even do anything with it 
} 

指針立即無效。

有可能是在其中提取原始指針的情況,但這些應該是罕見的。如果你是在一個函數,你知道你不需要引用計數,那麼就按引用傳遞的shared_ptr

相關問題