std::shared_ptr<X> 有复制构造函数吗?

Does std::shared_ptr<X> have a copy constructor?

本文关键字:复制 构造函数 gt ptr lt std shared      更新时间:2023-10-16

我正在学习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的非模板构造函数是复制构造函数,如果它的第一个参数是类型X&,常量X&,易失性X&或常数易失性X&,[…]

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