ここにコード例があります
class A{
int i;
public:
A(int i) : i(i) {}
void f() { prn(i); }
};
int main()
{
A* pi = new A(9);
A* pi2= new A(87);
boost::shared_ptr<A> spi(pi);
boost::shared_ptr<A> spi2(pi2);
spi=spi2;
spi->f();
spi2->f();
pi->f();
pi2->f();
}
出力:
87
87
0
87
問題は、出力に 0 が含まれている理由です。
ドキュメントからのメモ: 効果: shared_ptr(r).swap(*this) と同等。
しかし、shared_ptr
オブジェクトがスワップされたばかりの場合、結果は 9 になるはずです。また、最初のオブジェクトが削除された場合は、セグメンテーション違反が発生するはずです。
では、なぜ 0 なのですか?