2017-08-10 51 views
1

在C++中,如果我從一個函數返回一個共享/唯一的ptr,它是否按值返回?即返回一個共享指針

shared_ptr<CLASS> function_f(){ 
    auto p = make_shared<CLASS>(5); 
    return p; 
} 

那麼會發生什麼?指針是否被動態分配?如果我返回這個,我有兩個指針指向相同的東西嗎?

+0

您定義它的方式,'p'不是一個指針。 – ifconfig

+1

'std :: shared_ptr '*** object ***是通過值返回的。 –

回答

3

shared_ptr本身是由價值返回。它指向的CLASS對象是動態分配的,因此不會被複制。

您可能會短暫地將兩個shared_ptr設置爲同一個對象(RVO除外,因此實際上您可能不會),但通過設計shared_ptr類,這不是問題。

+0

然後當這個方法超出範圍時,'p'本身被刪除?所以我們只有1的引用計數? – Bana

+0

是的,'p'是函數範圍的局部。你顯示的代碼是'shared_ptr'的正確和習慣用法。 – Thomas