c++ - std::shared_ptr<X> 是否有复制构造函数?

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

最佳答案

Why shared_ptr does not have a simple copy constructor?

标准规定:

A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&, volatile X& or const volatile X&, [...]

没有什么简单的复制构造函数std::shared_ptr 有一个完全有效的复制构造函数。它构造一个 std::shared_ptr 对象,与给定对象共享所有权(如果有效)。

关于c++ - std::shared_ptr<X> 是否有复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42130940/

相关文章:

c++ - 自定义智能指针和多项式比较运算符

c++ - 将 libusb 设备存储在易于访问的容器中,没有所有权

c++ - 为什么我的 C++ 代码在 Linux 上运行而不在 Windows 上运行,RAM 内存有问题吗?

c++ - GlGenTextures 不断返回 0

c++ - 无法专门化函数模板编译器错误

c++ - 如何修复 istringstream 编译器错误?

c++ - 单例、shared_ptr、原始指针或其他指针?

请求从 C++ 到非标量类型的转换

c++ - 'make install' 被认为是有害的吗?

c++ - 使用继承时是否需要 "#include"子类父类的头文件。 C++