2017-02-09 31 views
3

我在學習std::shared_ptr
我讀了一篇關於構造函數shared_ptr的文檔來找到它的拷貝構造函數。std :: shared_ptr <X>有複製構造函數嗎?

我能找到一個構造函數,

shared_ptr(const shared_ptr& r); 

但現在看來,這不是一個簡單的拷貝構造函數我所料,

shared_ptr(shared_ptr& r); 

,似乎並不股引用計數器。

爲什麼shared_ptr沒有簡單的複製構造函數?

在情況下,我寫什麼我真的想下面做,

class A { 
public: 
    A(shared_ptr<X>& sptr) : sptr_(sptr) {} 
private: 
    shared_ptr<X> sptr_; 
}; 
+2

複製構造函數*通常*具有'const'部分(因爲它不應該修改傳遞的對象),但不需要它。 –

+0

你正在期待錯誤的事情。 C++中的拷貝構造函數通常需要一個*常量*(因此是'const')引用,因爲它不應該修改被拷貝的東西。 – filmor

+0

@filmor:謝謝你的評論。此副本是否增加原始shared_ptr實例的引用計數器? – mora

回答

4

爲什麼shared_ptr的沒有一個簡單的拷貝構造函數?

的標準說:

甲非模板構造用於類X是拷貝構造如果它的第一個參數是X型&,常量X &,易失性X &或const揮發性X的&,[...]

沒有什麼這樣一個簡單的拷貝構造函數std::shared_ptr改爲具有完全有效的複製構造函數。它構造一個std::shared_­ptr對象與給定的一個共享所有權(如果有效)。

+1

謝謝你告訴我答案。 – mora

+0

@mora不客氣。 – skypjack

相關問題