我正在学习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_;
};
为什么shared_ptr没有简单的副本构造函数?
标准说:
如果类的第一个参数的类型为X&,const X&,volatile X&或const volatile X&类型,则为类X的非模板构造器是副本构造器,[...
没有这样的简单副本构造函数。 std::shared_ptr
具有完全有效的副本构造函数。它构造一个std::shared_ptr
对象,该对象与给定的对象共享所有权(如果有效)。