国产探花免费观看_亚洲丰满少妇自慰呻吟_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;


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

圖片精選

主站蜘蛛池模板: 武清区| 黄骅市| 卓资县| 兴国县| 开平市| 井研县| 丰城市| 日土县| 义乌市| 南靖县| 汽车| 河津市| 蒲江县| 亚东县| 聂拉木县| 象州县| 苍山县| 阳曲县| 湘潭市| 云霄县| 贵港市| 永丰县| 通山县| 宁波市| 措美县| 扶余县| 东安县| 子洲县| 汽车| 图片| 德昌县| 麻栗坡县| 永济市| 大化| 神农架林区| 商都县| 剑阁县| 衡水市| 牡丹江市| 屏东市| 永福县|