2017-02-09 114 views
3

我在学习std::shared_ptr
我读了一篇关于构造函数shared_ptr的文档来找到它的拷贝构造函数。std :: shared_ptr <X>有复制构造函数吗?

我能找到一个构造函数,

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

复制构造函数*通常*具有'const'部分(因为它不应该修改传递的对象),但不需要它。 –

+0

你正在期待错误的事情。 C++中的拷贝构造函数通常需要一个*常量*(因此是'const')引用,因为它不应该修改被拷贝的东西。 – filmor

+0

@filmor:谢谢你的评论。此副本是否增加原始shared_ptr实例的引用计数器? – mora

回答

4

为什么shared_ptr的没有一个简单的拷贝构造函数?

的标准说:

甲非模板构造用于类X是拷贝构造如果它的第一个参数是X型&,常量X &,易失性X &或const挥发性X的&,[...]

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

+1

谢谢你告诉我答案。 – mora

+0

@mora不客气。 – skypjack