std :: shared_ptr 是否具有副本构造函数?

问题描述 投票:3回答:1

我正在学习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_;
};
c++ c++11 shared-ptr copy-constructor
1个回答
4
投票

为什么shared_ptr没有简单的副本构造函数?

标准说:

如果类的第一个参数的类型为X&,const X&,volatile X&或const volatile X&类型,则为类X的非模板构造器是副本构造器,[...

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

© www.soinside.com 2019 - 2024. All rights reserved.