スマートポインタは中途半端や

smart_ptr p1;		// 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がええ。