内存管理指针

时间:2015-04-29 17:02:16

标签: c++ pointers

我看到了删除指针amd的常见做法,即使没有为堆上的指针分配内存,也会在析构函数中使其为null。请考虑以下C ++代码:

dummy.h

PASSIVE_UNFOCUSED

dummy.cpp

class dummy
{
     int* a;
}

在上面的代码中,尽管没有在堆上分配内存,但即使它被删除。它不应该导致内存泄漏?

1 个答案:

答案 0 :(得分:2)

将其设为null是完全没有意义的,因为它即将被销毁。

由于if (a!=NULL),如果代码为空,则代码不会将其删除。然而,这也是毫无意义的:将delete应用于空指针将不会执行任何操作,因此您可以将析构函数减少为无条件delete a;(假设您知道它为null或指向对象使用new创建。

根据Rule of Three,您确实需要确保您的类不可复制或具有有效的复制语义;否则,复制对象将导致两次删除相同的内存,这是不允许的。

更好的是,停止玩弄指针,并使用智能指针,容器和其他RAII类型来简化生活。