调用内存分配方法c ++

时间:2016-03-24 18:30:29

标签: c++

执行以下操作,会产生内存问题(没有正确删除的新分配) 假设一个名为“object”的对象

class aClass
 { 
private:
    object* myobject;
public:
    aClass() : myobject(NULL) {};
    ~aClass() 
         {
            if(myobject)
               delete myobject;
             myobject = NULL;
         }
    void myfuction() 
       {
          if(myobject)
             myobject = new object();
       }
 }

调用myfunction()经常会创建永不释放的内存,或者我创建变量并将其复制到myobject这一事实是安全的,因为最后myobject会被删除吗?

1 个答案:

答案 0 :(得分:2)

  

调用myfunction()经常会创建永不释放的内存,

目前编写此函数时,它根本不会分配任何内存,因为您已经(正确地)在构造函数中初始化了指针:

aClass() : myobject(NULL) {};
                 // ^^^^

所以myfunction()

中的条件
if(myobject)

永远不会被满足,假设myobject内存分配的唯一代码位于myfunction()

  

或者我创建变量并将其复制到myobject这一事实是安全的,因为最后myobject会被删除?

好吧,为delete指针调用NULL是透明的,并且不会失败。

其实我觉得你想这样写myfunction()

void myfuction() {
    if(!myobject)
    // ^ Check if myobject is NULL
         myobject = new object();
}

只要aClass实例超出范围,析构函数就会正确删除已分配的内存。

但请注意Rule of Three以及其他会影响myobject成员作业的操作。