我在C++中有一個與boost::shared_ptr<>
有關的問題。我現在願意履行我的列表項的智能刪除:如果該項目不在使用在列表中正確使用boost :: shared_ptr
- 如果產品在使用中,不要做任何事情,後來將其刪除
- ,刪除它
這是我的程序所需的行爲。
我真的想知道如何做到這一點,因爲std::list<boost::shared_ptr<object> >
刪除/擦除功能會導致刪除shared_ptr<>
,從而刪除真實物體。
所以我終於想出了這個解決方案:使用std::list<object*>
並從boost::enable_shared_from_this<>
繼承object
。這樣,當有人需要使用列表中的項目時,我給他們object->shared_from_this()
。
我的問題有以下幾點:
- 請問這方面所期望的行爲?
- 與
shared_from_this()
相關聯的boost::shared_ptr<>
是否考慮了對列表中對象的引用?
我希望我的問題足夠明確,並且有人能夠幫助我。正確使用列表中的智能指針是我希望能夠使用的。
謝謝
'std :: list>刪除/擦除功能會導致刪除真實對象*僅當它是最後一次引用對象*的shared_ptr時。這正是你說你想要的。我猜你正在使用shared_ptr和普通指針指向同一個對象。答案很簡單,不要那樣做,只有shared_ptrs,它會按照你所說的要求工作。有時我想知道新手爲自己生活困難的能力。 –
john
感謝您的回答。那麼,你說的是我的想法。在我的程序中,我得到了兩倍的免費(這是相當大的),並認爲我錯誤地認爲是「valgrind」。我試圖在一個小程序中重現它,但不能。我想我是你說的新手。感謝您的幫助 – Rippalka