D言語 Part25
■ このスレッドは過去ログ倉庫に格納されています
0650デフォルトの名無しさん
2010/11/18(木) 21:39:48例えばHWNDとWindowクラスを関連付けるmapオブジェクトをWindowクラスが持っている状況で
WindowクラスがWM_DESTROYを受けたときmapオブジェクトから関連付けを削除する仕組みがあるとして
PostQuitMessageが飛んでくるとWM_DESTROYが来ないでアプリが終了してしますね
そのためにデストラクタでもmapから関連付けを削除しようと試みたときに
Windowクラスのデストラクタではmapオブジェクトが既に解体済みとなってしまって
アクセスした時点でアプリが不正メモリアクセスで落ちます。
↓は上とは関係ないけど落ちるケース
scopeつければいいんだけどscopeつけると宣言と同時にnewしないといけないから
ちょっと使いにくいなあ
class R{
A a;
~this(){a.func();}
void set(A a){this.a = a;}
};
class A{
void func(){}
}
void main()
{
auto r = new R;
r.set(new A); // rが解体されるときaは既に解体済みのためa.func()でcore
}
■ このスレッドは過去ログ倉庫に格納されています