我看到了删除指针amd的常见做法,即使没有为堆上的指针分配内存,也会在析构函数中使其为null。请考虑以下C ++代码:
dummy.h
PASSIVE_UNFOCUSED
dummy.cpp
class dummy
{
int* a;
}
在上面的代码中,尽管没有在堆上分配内存,但即使它被删除。它不应该导致内存泄漏?
答案 0 :(得分:2)
将其设为null是完全没有意义的,因为它即将被销毁。
由于if (a!=NULL)
,如果代码为空,则代码不会将其删除。然而,这也是毫无意义的:将delete
应用于空指针将不会执行任何操作,因此您可以将析构函数减少为无条件delete a;
(假设您知道它为null或指向对象使用new
创建。
根据Rule of Three,您确实需要确保您的类不可复制或具有有效的复制语义;否则,复制对象将导致两次删除相同的内存,这是不允许的。
更好的是,停止玩弄指针,并使用智能指针,容器和其他RAII类型来简化生活。