可以執行以下操作嗎?顯然,調用者不會阻止刪除裸指針。我應該使用shared_ptr並返回一個shared_ptr嗎?這似乎太重了。是否完全可以將一個裸指針返回給某個類的unique_ptr
class A
{
B* GetB() { return pointer.get(); }
private:
unique_ptr<B> pointer;
};
可以執行以下操作嗎?顯然,調用者不會阻止刪除裸指針。我應該使用shared_ptr並返回一個shared_ptr嗎?這似乎太重了。是否完全可以將一個裸指針返回給某個類的unique_ptr
class A
{
B* GetB() { return pointer.get(); }
private:
unique_ptr<B> pointer;
};
我認爲它應該工作正常,因爲它是,使得它在文檔中明確表示,這樣的指針並非是delete
d。
不過,我可能會返回一個引用:在這種情況下,暗示調用者一定不要delete
任何東西。
class A
{
B & GetB() { return *(pointer.get()); }
private:
unique_ptr<B> pointer;
};
編輯事實證明,該指針可以是NULL
;在這種情況下,必須避免參考。
您可以創建某種智能啞do_not_delete_me_ptr
類的,只是封裝指針,並做出格外清楚,你不能刪除它,但我認爲這也就是矯枉過正。 )
問題是對象可以爲null – 2011-04-27 21:58:55
然後一個指針對你來說是完美的。 – 2011-04-27 22:01:01
@Sriram:好吧,那麼引用絕對不在選擇之列,因爲取消引用NULL指針(甚至創建引用)是UB。我會用裸指針+ doc警告,然後,使用'shared_ptr'這個東西*方式*矯枉過正。 – 2011-04-27 22:01:18
從升壓文檔上unique_ptr
:
甲的unique_ptr不是複製構造,也不CopyAssignable,但它是MoveConstructible和Move-可分配。
反正你不能退還unique_ptr
本身(因爲你保留副本作爲成員)。
如果確保對象被分配(即指針永遠爲空),我會返回一個引用。
他沒有返回'unique_ptr',他正在返回'unique_ptr'封裝的指針。 – 2011-04-27 21:58:56
對不起,我的答案誤解了。這應該是固定的。 – 2011-04-27 21:59:38
é:現在很好。 :) – 2011-04-27 22:02:37
顯然,你不再擁有一個獨特的指針,因爲你打算多重共存。我會開始質疑我的假設。 – 2011-04-27 22:34:39