可能重复:
为什么下面的代码没有崩溃,虽然我已经删除了对象?
今天我发现我对 C++ 内存管理一无所知。请看一下这段代码:
class A
{
public:
A(){std::cout << "constructor called" << this << std::endl;}
~A(){std::cout << "destructor called" << this << std::endl;}
void test (){std::cout << "test" << this << std::endl;}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
A *aa = new A();
delete aa;
aa->test();
aa->test();
aa->test();
std::cout << "still works\n";
return a.exec();
}
为什么不崩溃?为什么尽管调用了析构函数,它仍然继续执行?当我调用test
方法时,我会处理不再属于应用程序的内存。
更令人惊讶的是,即使我在aa = NULL;
之后插入它仍然有效delete aa;
。test
方法被调用好了。我必须承认我完全糊涂了。如果没有效果,析构函数和分配 NULL 的目的是什么?