【发布时间】:2012-03-13 15:57:35
【问题描述】:
我正在动态地为一个对象分配内存,然后如果我调用 delete 会发生什么? 调用析构函数还是删除函数有不同的内存处理方式?
考虑以下示例:
class A
{
int x;
}
int main()
{
A *ptr = new A();
delete ptr;
return 0;
}
析构函数在哪里调用?
【问题讨论】:
-
在
A中定义析构函数并查看调用!! -
它应该在
delete上调用,但你可以在析构函数中设置一个断点并逐步执行。 -
Ken,将已删除的指针设置为
NULL是一个好习惯。如果您删除已删除(未分配)的内存,这是未定义的行为,但如果您删除 NULL 指针,则不会发生任何事情。此外,您应该考虑使用 RAII 来满足您的所有资源(不仅仅是内存)需求。 -
将已删除的指针设置为NULL不是一个好习惯,因为您无法检测到双重删除,这是一个错误。毕竟:使用 shared_ptr 或 unique_ptr 来管理对象的生命周期。
标签: c++ destructor new-operator delete-operator