我定义了一个返回引用的方法。我知道删除pt没有任何意义,但是当我运行代码时,它会提示“〜对象”被调用。那么这段代码有什么问题吗?为什么我不删除指针,但仍然会调用解构函数?如果被调用,在这种情况下是否存在任何内存问题? 假设指针和引用都指向一个对象,那么一个是解构函数,是否需要删除指针?
#include <iostream>
#include "Object.h"
using namespace std;
Object &testreturn(){
Object *pt=new Object();
return *pt;
}
int main() {
Object o=testreturn();
return 0;
}
答案 0 :(得分:2)
是的,此示例中存在内存泄漏。问题是您的o
对象在离开作用域时会自动删除,它是您的函数分配的对象的副本。该原件仍在存储器中等待删除。
话虽如此,这个例子没有理由进行动态分配。相反,请考虑一下:
Object testreturn(){
Object pt;
return pt;
}
答案 1 :(得分:2)
将调用析构函数,但仅针对示例代码中创建的两个对象中的一个对象。
以下是发生的事情:
testreturn
创建实例#1,并返回对它的引用main
将实例#1复制到实例#2