やあみんな私は簡単なテストを書きました。delete を呼び出して deleteMe を呼び出してから、それ自体を削除します。これの目的は、lib によって割り当てられた obj を正常に削除できるようにすることです。(crtまたはw / eによるクラッシュは望んでいません)。
これを削除すると、スタックオーバーフローが発生します。それがなければ、msvc は 4 バイトがリークしたと言います。test を呼び出さないと 0 がリークします。再帰の問題がある場合はどうすれば削除できますか? -編集-これをより明確にするために。crtが原因で、LIBがプログラムの代わりにdelete(したがってdeleteMe)を呼び出すようにしたい
class B
{
public:
virtual void deleteMe()=0;
static void operator delete (void* p) { ((B*)p)->deleteMe(); }
};
class D : public B
{
public:
void deleteMe() {
delete this;
}
};
int test()
{
B *p = new D;
delete p;
return 0;
}