{ Visual Studio 2010 、Win7 を使用 }
class Base
{
public:
Base() : terminateCondition(false)
{
//spawn new thread and set entry point to newThreadFunc()
}
virtual ~Base() // edited to say it's virtual.
{
terminateCondition=true;
//wait for thread to join
}
virtual void vfunc() = 0;
static void __stdcall newThreadFunc(void *args)
{
while(!terminateCondition)
pThis->vfunc();
}
volatile bool terminateCondition;
};
class Derived : public Base
{
public:
virtual void vfunc()
{
//Do Something
}
};
Derived* dPtr=new Derived; //now assume pThis is dptr
//later somewhere
delete dPtr;
このコードは、と言ってクラッシュしますpure virtual called
。terminateCondition=true
のデストラクタに移動すると、Derived
このクラッシュが回避されます。私は部分的に理由を理解していると思います。破壊は構築の逆順であるため、 の d'tor が最初に実行され、 の d'tor を呼び出す前にDerived
のすべての機能が破壊されます。その間にが発生すると、アプリケーションがクラッシュします。と呼ばれる純粋な仮想を言ってクラッシュします。この部分が理解できませんでした。誰か説明してくれませんか?Derived
Base
pThis->vfunc()