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;
新聞熱點
疑難解答
圖片精選