a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

淺談返回函數內部new分配的內存的引用

2020-01-26 14:20:49
字體:
來源:轉載
供稿:網友

在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分配的內存的引用全部內容了,希望大家多多支持武林網~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 成人三级视频 | 禁片天堂 | 特级做a爰片毛片免费看108 | 一区免费视频 | 午夜精品久久久久久久久久蜜桃 | 欧美日一区二区 | 亚洲精品色 | 91亚洲高清 | 美女黄网站视频免费 | 久久久久久久久国产精品 | 国产在线激情 | 久久99蜜桃综合影院免费观看 | 黄色免费在线观看网址 | 久久精品一区二区三区四区 | 好姑娘影视在线观看高清 | 精品国产一区一区二区三亚瑟 | 国产亚洲精品精品国产亚洲综合 | 蕉伊人| www.欧美日韩| 久草在线资源福利站 | 亚洲福利影院 | 欧美国产视频 | 久久精品国产一区二区电影 | 午夜视频在线观看网站 | 欧美日韩国产在线观看 | 一区二区在线免费观看 | 亚洲午夜视频在线观看 | 日日撸夜夜操 | 91国自产区一二三区 | 玖玖色资源 | 欧美日韩一区免费 | 国产婷婷在线视频 | 免费黄网址 | 电影91久久久 | 日韩av在线免费看 | 在线视频成人永久免费 | 天天干狠狠干 | 国产精品一区人伦免视频播放 | 午夜电影网址 | 欧美日韩亚洲国产 | 欧美高清一区 |