c++用一个按值传递返回堆中对象实例

c++用一个按值传递返回堆中对象实例,以下程序中将造成内存泄露。p指针被删除了,它所指向的内存空间还存在,该空间的地址只有p保存着,而p找不到了,所以我们无法找到该空间。由于无法找到空间,所以无法释放,结果造成内存泄露。

#include <iostream>
using namespace std;
class A
{
public :
A(int i){cout<<”执行构造函数创建一个对象\n”;x=i;}
A(A&a){x=a.x;cout<<”执行复制构造函数创建一个对象\n”;}
~A(){cout<<”执行析构函数!\n”;}
int get(){return x;}
private:
int x;
};

A func()
{
cout<<”跳转到func函数中!\n”;
A *p=new A(99);//创建堆中对象,该对象空间内没有使用delete删除,造成内存泄露
cout<<”堆中对象的地址:”<<p<<endl;
return *p;//返回对象值按值返回,这里会调用复制构造函数,复制对象a的一个副本
}

int main(){

A&r=func();//使用别名r接收返回的对象的副本
cout<<”堆中对象的副本的地址:”<<&r<<endl;//c++输出返回对象的地址
cout<<r.get()<<endl;//使用别名调用get函数输出成员函数
return 0;
} 本文链接地址: c++用一个按值传递返回堆中对象实例