想象一下,我在方法/函數的堆上創建Foo實例並將其傳遞給調用者。我會用什麼樣的智能指針?可以將scoped_ptr和shared_ptr混合在一起嗎?
smartptr new_foo() {
smartptr foo = new Foo();
return foo;
}
void bar() {
smartptr foo = new_foo();
foo->do_something();
// now autodelete foo, don't need it anymore
}
好...現在:據我瞭解,從推動這些smartpointers,scoped_ptr的應該是在酒吧中使用的一個()。但我不能在foo()中創建它,因爲它不可複製。所以我必須在foo()中創建一個shared_ptr並將其返回。但是,我現在必須在bar()中使用shared_ptr,還是可以將它「投」到bar()中的shared_ptr?
編輯
謝謝您的回答至今!所以,現在我有兩個解決方案:
- 只能使用
boost::shared_ptr
- 使用
std::auto_ptr
發電機FOO()和巴()
真誠boost::shared_ptr
,我更喜歡只升壓解決方案和韓元不要將它與STL混合,除非這樣做的確有充分的理由。那麼,下一個問題:與混合解決方案相比,混合解決方案具有哪些優勢(的任何優勢)?
返回'auto_ptr'不限制什麼你可以這樣做;你可以使用它來初始化一個'shared_ptr',或者調用'release'並且用原始指針做任何你想做的事情(只要你記得最終刪除它) – 2010-09-02 10:31:57
好吧,但它會重新調整你可以不要自己管理資源,這首先是要用到它的,或者至少你需要小心,即沒有容器的auto_ptr – 2010-09-02 10:50:35
也許是最好的方法要說它只是auto_ptr有一些你需要注意的危險,unique_ptr會修復這些 – 2010-09-02 11:08:24