クラスのポインタを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

Hoge::~Hoge