クラスのポインタをvoid*でdeleteした場合デストラクタが呼ばれない
意外と知らない人が多かったので簡単なサンプル
#include <iostream> struct Hoge { ~Hoge() { std::cout << __FUNCTION__ << std::endl; } }; int main() { Hoge* p = new Hoge; void* pv = p; delete pv; return 0; }
実行結果 gcc4.4
実行結果 VC8
必ず正しいクラスのポインタでdeleteすること。
#include <iostream> struct Hoge { ~Hoge() { std::cout << __FUNCTION__ << std::endl; } }; int main() { Hoge* p = new Hoge; delete p; return 0; }
実行結果 gcc4.4
~Hoge
実行結果 VC8