【发布时间】:2015-02-10 13:11:57
【问题描述】:
我在“C++ 编程语言,第 4 版”第 17.5.1.3 章中找到了以下代码
struct S2 {
shared_ptr<int> p;
};
S2 x {new int{0}};
void f()
{
S2 y {x}; // ‘‘copy’’ x
∗y.p = 1; // change y, affects x
∗x.p = 2; // change x; affects y
y.p.reset(new int{3}); // change y; affects x
∗x.p = 4; // change x; affects y
}
我不明白最后的评论,确实 y.p 应该在 reset() 调用之后指向一个新的内存地址,所以
∗x.p = 4;
应该让 y.p 不变,不是吗?
谢谢
【问题讨论】:
-
clang 似乎不同意 it says y.p is 3 at the end
-
这是一本大书,肯定会有错误的例子,请参阅我最近的question here for another example,正如 Bjarne 所说的here 随时向我发送建议的勘误表。在本书的约束范围内,我会修正每一个可以修正的错误。如何联系他可以在main page找到。