这个C ++代码示例中有关于指针的内存泄漏吗?

时间:2013-11-17 02:01:48

标签: c++ pointers

我定义了一个返回引用的方法。我知道删除pt没有任何意义,但是当我运行代码时,它会提示“〜对象”被调用。那么这段代码有什么问题吗?为什么我不删除指针,但仍然会调用解构函数?如果被调用,在这种情况下是否存在任何内存问题? 假设指针和引用都指向一个对象,那么一个是解构函数,是否需要删除指针?

#include <iostream>
#include "Object.h"

using namespace std;

Object &testreturn(){
    Object *pt=new Object();
    return *pt;
}

int main() {
    Object o=testreturn();
    return 0;
}

2 个答案:

答案 0 :(得分:2)

是的,此示例中存在内存泄漏。问题是您的o对象在离开作用域时会自动删除,它是您的函数分配的对象的副本。该原件仍在存储器中等待删除。

话虽如此,这个例子没有理由进行动态分配。相反,请考虑一下:

Object testreturn(){
    Object pt;
    return pt;
}

答案 1 :(得分:2)

将调用析构函数,但仅针对示例代码中创建的两个对象中的一个对象。

以下是发生的事情:

  • testreturn创建实例#1,并返回对它的引用
  • main将实例#1复制到实例#2
  • 例如#2的析构函数被称为
  • 实例#1泄露。