我知道删除操作符以及它如何自动调用类的析构函数.但是,我最近看到有人直接调用了类的析构函数,这对我来说似乎很奇怪.所以我写了一个简短的程序,给出了一个非常不期望的结果:
#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));
}
Run Code Online (Sandbox Code Playgroud)
所以如你所见,我正在调用析构函数~A(),所以我希望程序在第二次尝试访问变量'a'时会崩溃(因为它在2行之前被删除了).相反..程序只是打印出来没有任何投诉:
a:42 b:33
b:33
a:42
Run Code Online (Sandbox Code Playgroud)
......为什么?当我直接调用~A()时会发生什么?有什么情况可以这么做吗?