在bbs看到了一个帖子:为什么不能返回函数内部new分配的内存的引用?

lz是这样问的:
按照这句话,
string& foo()
{
string* str = new string("abc");
return *str;
}
非法的,为什么?
其实,不能说这是非法的,只能说这种u编程习惯很不好,这样很可能造成内存泄露。
后面还有个回复是这样的:
struct a_s
{
int a;
};
a_s* foo()
{
struct a_s* sp = new struct a_s;
return sp;
}
这个挺好啊,为什么换成reference就泄漏了?
不能说这样写就挺好,这样写跟lz写的都是一个道理,也并不是说这样写就内存泄露了,只是说,这样写很容易造成内存泄露。程序员在编写代码时,为了避免内存泄露,必须保证对每个用new产生的指针调用delete释放。
如果按照以上两种做法,即使很小心的程序员也难免会造成内存泄露。
比如:string str = foo(); 显然new生成的这块内存将无法释放。
只能这样:
string& tmp = foo(); string str = tmp; delete &tmp;
这样就不会造成内存泄露了。 但是每次的这样就是谁都觉得烦。而且暗藏杀机啊,比如:string str = "hello" + foo(); 上式不知不觉就造成内存泄露了。所以,即使很小心的程序员也难免会造成内存泄露。
为了证明我的思想,我写了测试代码:(vs2008调式通过)
#include <iostream>
using namespace std;
class example
{
public:
example()
{
num = new int;
*num = 10;
cout<<"num = "<<*num<<endl;
cout<<"构造"<<endl;
}
~example()
{
cout<<"析构"<<endl;
delete num;
}
void pingfang()
{
*num *= *num;
}
void print()
{
cout<<*num<<endl;
}
private:
int *num;
};
example & diaoyong1()
{
example * p = new example;
p->pingfang();
return *p;
}
example * diaoyong2()
{
example * p = new example;
p->pingfang();
return p;
}
int main(void)
{
example & e1 = diaoyong1();
e1.print();
delete &e1;
example * ptr = diaoyong2();
ptr->print();
delete ptr;
getchar();
return 0;
}
运行结果如下:
num = 10
构造
100
析构
num = 10
构造
100
析构
从运行结果来看:我的结论如下:
并不是说返回函数内存new分配的内存的引用或指针是非法的,只是说如果要返回,必须要十分注意,因为很有可能造成内存泄露。所以一般不提倡返回函数内存new分配的内存的引用或指针。
以上就是小编为大家带来的浅谈返回函数内部new分配的内存的引用全部内容了,希望大家多多支持~
# c
# 函数返回引用
# 基于C++内存分配、函数调用与返回值的深入分析
# C/C++动态分配与释放内存的区别详细解析
# 是说
# 是这样
# 挺好
# 很小心
# 都是
# 这是
# 有个
# 两种
# 很容易
# 这句话
# 很可能
# 写了
# 谁都
# 这块
# 浅谈
# 很有可能
# 为了避免
# 小编
# 很不好
# 大家多多
相关文章:
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
建站之星×万网:智能建站系统+自助建站平台一键生成
SQL查询语句优化的实用方法总结
广州美橙建站如何快速搭建多端合一网站?
建站主机服务器选购指南:轻量应用与VPS配置解析
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何在搬瓦工VPS快速搭建网站?
如何在Windows虚拟主机上快速搭建网站?
开源网站制作软件,开源网站什么意思?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
建站主机如何选?高性价比方案全解析
网站制作公司排行榜,四大门户网站排名?
如何选择最佳自助建站系统?快速指南解析优劣
如何快速查询网址的建站时间与历史轨迹?
网站制作的步骤包括,正确网址格式怎么写?
平台云上自主建站:模板化设计与智能工具打造高效网站
网站制作难吗安全吗,做一个网站需要多久时间?
建站之星展会模板:智能建站与自助搭建高效解决方案
北京网站制作网页,网站升级改版需要多久?
网站制作免费,什么网站能看正片电影?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
如何快速生成高效建站系统源代码?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
如何选择服务器才能高效搭建专属网站?
已有域名如何免费搭建网站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
如何设置并定期更换建站之星安全管理员密码?
招贴海报怎么做,什么是海报招贴?
如何破解联通资金短缺导致的基站建设难题?
如何通过虚拟主机快速搭建个人网站?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
长沙企业网站制作哪家好,长沙水业集团官方网站?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
网站微信制作软件,如何制作微信链接?
如何快速生成专业多端适配建站电话?
制作电商网页,电商供应链怎么做?
制作网站的软件免费下载,免费制作app哪个平台好?
建站之星伪静态规则如何设置?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
,网页ppt怎么弄成自己的ppt?
如何制作算命网站,怎么注册算命网站?
北京网站制作公司哪家好一点,北京租房网站有哪些?
香港服务器WordPress建站指南:SEO优化与高效部署策略
大学网站设计制作软件有哪些,如何将网站制作成自己app?
*请认真填写需求信息,我们会在24小时内与您取得联系。