2011-04-27 68 views
1

可以執行以下操作嗎?顯然,調用者不會阻止刪除裸指針。我應該使用shared_ptr並返回一個shared_ptr嗎?這似乎太重了。是否完全可以將一個裸指針返回給某個類的unique_ptr

class A 
{ 
    B* GetB() { return pointer.get(); } 
private: 
    unique_ptr<B> pointer; 
}; 
+0

顯然,你不再擁有一個獨特的指針,因爲你打算多重共存。我會開始質疑我的假設。 – 2011-04-27 22:34:39

回答

4

我認爲它應該工作正常,因爲它是,使得它在文檔中明確表示,這樣的指針並非是delete d。

不過,我可能會返回一個引用:在這種情況下,暗示調用者一定不要delete任何東西。

class A 
{ 
    B & GetB() { return *(pointer.get()); } 
private: 
    unique_ptr<B> pointer; 
}; 

編輯事實證明,該指針可以是NULL;在這種情況下,必須避免參考。

可以創建某種智能啞do_not_delete_me_ptr類的,只是封裝指針,並做出格外清楚,你不能刪除它,但我認爲這也就是矯枉過正。 )

+0

問題是對象可以爲null – 2011-04-27 21:58:55

+0

然後一個指針對你來說是完美的。 – 2011-04-27 22:01:01

+1

@Sriram:好吧,那麼引用絕對不在選擇之列,因爲取消引用NULL指針(甚至創建引用)是UB。我會用裸指針+ doc警告,然後,使用'shared_ptr'這個東西*方式*矯枉過正。 – 2011-04-27 22:01:18

0

從升壓文檔上unique_ptr

甲的unique_ptr不是複製構造,也不CopyAssignable,但它是MoveConstructible和Move-可分配。

反正你不能退還unique_ptr本身(因爲你保留副本作爲成員)。

如果確保對象被分配(即指針永遠爲空),我會返回一個引用。

+1

他沒有返回'unique_ptr',他正在返回'unique_ptr'封裝的指針。 – 2011-04-27 21:58:56

+0

對不起,我的答案誤解了。這應該是固定的。 – 2011-04-27 21:59:38

+0

é:現在很好。 :) – 2011-04-27 22:02:37

相關問題