スマートポインタは中途半端や
smart_ptrp1; // AClassは参照カウンタを持つクラス AClass *p = new AClass(); // ここで参照カウンタ=1 p1 = p; // 参照カウンタが1のまま { smart_ptr p2 p2 = p; // 参照カウンタが1のまま ... // スコープを抜けるときp2のデストラクタで、 // 参照カウンタが-1されて0になり、pはdeleteされる。 } p1->func(); // deleteされたインスタンスをアクセスしてエラーになる。
p1 = p; p2 = p; の代入で参照カウンタを+1するようにすれば、今度はpの参照カウンタは1で終了しメモリリークする。
どうしたら委員会。
p2 = p;の所を
p2 = p1;にすればいいのか。
生のポインタをスマートポインタに代入する時は、
生のポインタが既にスマートポインタで管理済みかどうかで、参照カウンタを+1するかどうかがわかれるのかな。
その判断は難しい。
なんか扱いにくい…。やっぱりjavaがええ。