私はの循環参照を試していて、boost::shared_ptr
次のサンプルを考案しました。
class A{ // Trivial class
public:
i32 i;
A(){}
A(i32 a):i(a){}
~A(){
cout<<"~A : "<<i<<endl;
}
};
shared_ptr<A> changeI(shared_ptr<A> s){
s->i++;
cout<<s.use_count()<<'\n';
return s;
}
int main() {
shared_ptr<A> p1 = make_shared<A>(3);
shared_ptr<A> p2 = p1;
shared_ptr<A> p3 = p2;
shared_ptr<A> p4 = p3;
p1 = p4; // 1) 1st cyclic ref.
cout<<p1.use_count()<<'\n';
p1 = changeI(p4); // 2) 2nd cyclic ref.
cout<<p1.use_count()<<'\n';
// putchar('\n');
cout<<endl;
}
どの出力
4
5
4
~A : 4
で述べた循環参照を誤解したのboost::shared_ptr
でしょうか?p1
なぜなら、アフターコメント1)
とへの間接参照については、異なる出力思考を期待していたから2)
です。したがって、このコードは必要ありませんboost::weak_ptr
!weak_ptr
では、 sが必要となる循環参照は何ですか?
前もって感謝します。