我刚刚在codereview进行了争论,其中声称拥有std::shared_ptr
成员的类会违反CopyConstructible合同,具体为:
以下表达式必须有效且具有指定的表达式 效果
T u = v;
v的值不变
原因是复制会通过增加shared_ptr
的引用计数来更改源对象,但我的反驳参数是引用计数与{{ 1}}。更改引用计数是副作用,但引用并未声明禁止复制的对象之外的副作用。
但后来我不是语言律师,所以我可能错了。
根据C ++标准,什么是正确的?
答案 0 :(得分:2)
v的值不变
对象的价值就是你所说的。
原因是复制会通过增加shared_ptr的引用计数来更改源对象,但我的反驳参数是引用计数与shared_ptr分开存储。
存储计数的地方,或是否存储在某处,超出了标准的范围。