構造体を new/delete 演算子でメモリ管理したら例外発生

何十年とC言語を扱ってきて、今まで出たことがない例外が発生。

構造体を、たとえば

typedef tagTEST {
int a ;
int b;
// コンストラクタ //
tagTEST() {}
virtual ~tagTEST() {}
} TEST;

のように定義。

きっと、構造体にコンストラクタやデストラクタは不要だという意見はあるのだろうが。

で、ポインタ配列にしたかったので、

TEST* p = new TEST ;
(ポインタを配列に登録)


…(適当な処理)…

delete p;

としたら、冒頭の例外が発生。

そもそも、あまりこんな風にしないけど、原因不明で検索しまくったら、コンストラクタやデストラクタは定義するとおかしくなると言及してる専門家がいた。

試しに、外してみたら、正解。

typedef tagTEST {
int a ;
int b;
// コンストラクタ //
tagTEST() {}
// コメントアウト virtual ~tagTEST() {}
} TEST;