国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++開發中的棧、堆和內存分配

2019-11-06 06:34:23
字體:
來源:轉載
供稿:網友

Output函數

Ostream& Operator <<(ostream& os, const String & str){   Os<<str.get_c_str();   return os; }

 創建對象

 Stack heap

當你調用函數,函數本身就會形成一個stack,用來放他所接收的參數,自動消失.

堆 則是由藏做系統提供的一塊空間,程序可以動態分配 但是必須自己手動消滅

Class Cmoplex{...}   ... {   Complex c1 (1,2); // ①<-----這時候,析構函數會自動調用 ,來清理,他用的是 stack   Complex* p = new complex(3);}

如果在①前加個static,則其生命在作用域之后仍在存在,程序結束時才會出現析構函數。-------------------------------------------------------------------------------------------------------------------------------------------------------------

全局對象

Calss complex{.....}     ...Complex c3 (1,2);   Int main()          { ...}

c3便是所謂的 global object他的生命在整個程序結束之后才會結束,

當然,也可以將其看做 static object 其作用域是整個程序

Class complex{...}...{  Complex* p = new complex;         Delete p;    }  

 p所指的便是 heap object其生命在delete之后消失。

如果沒有刪掉,就會出現memory leak;p所指的heap object仍然存在,但是p已經沒了  。

New 可以被分解為三個動作:

Complex * pc = new Complex(1,2);

①void *mem = operator new (sizeof(complex));//分配內存

②pc = static_cast<complex*>(mem);   //轉型

③pc->complex::complex(1,2) //構造函數                         

Delete :先調用析構函數,在釋放內存

①string::~String(ps);析構函數:將字符串指針指向的那塊東西刪掉。

②operator deldete(ps); 釋放內存

 

動態分配所得的內存塊

New一下得到8個字節,在調試模式下多得一些字節

Complex 是 8  字節  上下(粉色)作用是來記錄內存塊的大小

動態分配所得的array

Complex * p = new Complex[3];

String *p = new String[3] 第二個是用array new來分配空間的

array new 必須要搭配 array delete;


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

圖片精選

主站蜘蛛池模板: 东兴市| 山阳县| 马关县| 蒲城县| 颍上县| 柏乡县| 岫岩| 翁牛特旗| 灵台县| 永春县| 尚志市| 嘉禾县| 班戈县| 新竹县| 遂溪县| 于都县| 邯郸县| 江川县| 荆门市| 淮北市| 密山市| 琼结县| 辽宁省| 长顺县| 达尔| 修水县| 湟源县| 化德县| 分宜县| 扶余县| 故城县| 乌鲁木齐县| 陆良县| 澄迈县| 武冈市| 东宁县| 万安县| 黑山县| 宁城县| 柏乡县| 托克逊县|