2017-02-09 20 views
3

私はstd::shared_ptrを学んでいます。
shared_ptrのコンストラクタに関するドキュメントを読んで、そのコピーコンストラクタを見つけました。std :: shared_ptr <X>にコピーコンストラクタがありますか?

私は、コンストラクタを見つける

shared_ptr(const shared_ptr& r); 

が、それは、私が期待される、単純なコピーコンストラクタではありません

shared_ptr(shared_ptr& r); 

と、それは株式がカウンターを参照していないようだと思われる可能性があります。

なぜshared_ptrに単純なコピーコンストラクタがないのですか?場合

shared_ptrのは、単純なコピーコンストラクタを持っていないのはなぜ、私が

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

コピーコンストラクタは通常、(渡されたオブジェクトを変更するべきではないため) 'const'部分を持っていますが、必要ではありません。 –

+0

あなたは間違ったことを期待しています。 C++のコピーコンストラクタは、コピーされるものを変更することは想定されていないので、通常、* constant *(したがって 'const')参照を受け取ります。 – filmor

+0

@filmor:コメントありがとうございました。このコピーは元のshared_ptrインスタンスの参照カウンタをインクリメントしますか? – mora

答えて

4

、私は本当に、以下の何をしたいか書くのか?その最初のパラメータがタイプX &、constのX &、揮発性X &またはconstの揮発性Xであれば

クラスXのための非テンプレートコンストラクタは、コピーコンストラクタは次のとおりです。

標準はと言います&、[...]

、単純なコピーコンストラクタ、このようなものはありません。 std::shared_ptrには完全に有効なコピーコンストラクタが代わりにあります。与えられたものと所有権を共有するオブジェクト(有効な場合)std::shared_­ptrを作成します。

+1

答えを教えてくれてありがとう。 – mora

+0

@moraようこそ。 – skypjack