有一个shared_ptr成员是否会破坏CopyConstructible合约?

时间:2017-06-10 20:42:27

标签: c++ shared-ptr copy-constructor

我刚刚在codereview进行了争论,其中声称拥有std::shared_ptr成员的类会违反CopyConstructible合同,具体为:

  

以下表达式必须有效且具有指定的表达式   效果

     

T u = v;

     

v的值不变

原因是复制会通过增加shared_ptr引用计数来更改源对象,但我的反驳参数是引用计数与{{ 1}}。更改引用计数是副作用,但引用并未声明禁止复制的对象之外的副作用。

但后来我不是语言律师,所以我可能错了。

根据C ++标准,什么是正确的?

1 个答案:

答案 0 :(得分:2)

  

v的值不变

对象的价值就是你所说的。

  

原因是复制会通过增加shared_ptr的引用计数来更改源对象,但我的反驳参数是引用计数与shared_ptr分开存储。

存储计数的地方,或是否存储在某处,超出了标准的范围。