std :: shared_ptr <x>是否有拷贝构造函数?

时间:2017-02-09 07:47:39

标签: c++ c++11 shared-ptr copy-constructor

我正在学习std::shared_ptr 我阅读了一篇关于shared_ptr的构造函数的文档,以找到它的复制构造函数。

我可以找到一个构造函数,

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_;
};

1 个答案:

答案 0 :(得分:4)

  

为什么shared_ptr没有简单的复制构造函数?

标准说:

  

X类的非模板构造函数是一个复制构造函数,如果它的第一个参数是X&amp;类型,const X&amp;,volatile X&amp;或const volatile X&amp;,[...]

没有这样的简单复制构造函数std::shared_ptr具有完全有效的复制构造函数。它构造了一个std::shared_­ptr对象,该对象与给定的对象共享所有权(如果有效)。