我总是看论坛上关于析构函数的帖子,但却完全感到困惑。
有些人说要调用析构函数(使用delete
)每次调用new
都需要。有些人说在各种情况下自动调用析构函数,例如指针被重新分配、对象超出作用域等。有些人建议当指针作为返回值超出作用域时,该对象存在于其原始副本中,(那么是否需要显式销毁它,因为它最初是由new
创建的?
有一些建议认为多次调用同一个析构函数会破坏内存,因此所有的delete
调用都应该与*pointer = NULL;
配对以避免破坏。如果没有,那么就需要实现更高级的对象管理系统,或者实行严格的所有权规定。
pointer
是一个普通的一级指针(例如,像int* pointer
声明的那样),那么在delete
之后执行*pointer = NULL
将无法起到任何好处。实际上,它很可能会使程序崩溃。 - Some programmer dude