delete 演算子と、それがクラスのデストラクタを自動的に呼び出す方法について知っています。しかし、最近、誰かがクラスのデストラクタを直接呼び出すのを見たことがありますが、これは非常に奇妙に思えました。だから私は本当に予期しない結果をもたらす短いプログラムを書きました:
#include <stdio.h>
class A
{
public:
A() {a = new int; *a=42; b=33;}
~A() {delete a;}
int* a;
int b;
};
int main(int argc, const char ** argv)
{
A* myA = new A();
printf("a:%d b:%d\n", *(myA->a), myA->b);
myA->~A();
printf("b:%d\n", myA->b);
printf("a:%d\n", *(myA->a));
}
ご覧のとおり、デストラクタ ~A() を呼び出しているので、変数 'a' にもう一度アクセスしようとすると、プログラムがクラッシュするはずです (2 行前に削除されたため)。代わりに..プログラムは文句なしにこれを出力します:
a:42 b:33
b:33
a:42
... どうして?~A() を直接呼び出すとどうなりますか? そうすることが役立つ状況はありますか?