A shared_ptr<>
用於表示內存資源的共享所有權。指向同一對象的所有(適當創建的)shared_ptr<>
共享其所有權:只有在指向它的最後一個shared_ptr<>
被銷燬(或者reset()
,見下文)時才刪除該對象。因此,如果你想
auto raw_ptr = fn().get(); // call shared_ptr<>::get(); DON'T DO THAT
raw_ptr->member_func(); // may crash
那麼shared_ptr<>
從fn()
返回被立即銷燬和指向的對象可能是太,或者它可以隨時後來被毀。在這種情況下,raw_ptr
將變爲dangling pointer。爲了避免這種情況,你必須堅持所有權通過保持一個shared_ptr<>
對象活着:
auto ptr = fn(); // move shared_ptr<>: pass ownership
ptr->member_func(); // fine (unless fn() returned an empty pointer)
現在,通過ptr
管理的對象將不會被前ptr
本身被刪除,除非你明確reset()
它:
ptr.reset(); // removes ownership from ptr
問你自己爲什麼該函數返回一個共享指針。 – juanchopanza
爲什麼不'std :: shared_ptr'? –
[shared_ptr :: get](http://en.cppreference.com/w/cpp/memory/shared_ptr/get)返回'T *'。 – mch