全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅谈返回函数内部new分配的内存的引用

在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小时内与您取得联系。