第十二章 類和動態記憶體分配

2021-08-10 23:55:32 字數 1234 閱讀 6655

// 類和動態記憶體分配

1. 例項原型宣告

class stringbad

;

2.//過載 = 號

stringbad & stringbad::operator=(const stringbad & st)
3.//建構函式

stringbad::stringbad(const

char *s)

4.//例項://注:delete 只能釋放 new

char *str = "woaini";

len = strlen(str);

char *str1 = new

char[len+1];//1.必須加一。

strcpy(str1,str); //2.必須給str1中賦值

delete str1; // 若上述1,2沒有完成 會彈框報錯

3.//複製建構函式函式原型定義

stringbad::stringbad(const stringbad & st)
4.//如果沒有定義複製建構函式會 怎麼樣?

(1) stringbad str = "123";

stringbad str1 = str; **//當 str1 呼叫~stringbad()時會報錯,由於delete**

(2)void callm(const stringbad str); //做函式形參時 會出錯

void callm(const stringbad & str);//定義為引用 時,正常執行

5. //成員初始化列表

//若有這樣的函式

注:text 是 const 資料成員

stringbad::stringbad(int qs)

//應該改為

stringbad::stringbad(int qs):text(qs),len(0)**

//const變數必須這樣初始化,其他變數也可以用列表初始化**

第十二章 動態記憶體

程式除靜態記憶體和棧記憶體,還有自由空間 free store or 堆 heap 使用動態記憶體容易造成記憶體洩漏 忘記delete new分配的空間。share ptr類 模板。最好用make shared函式來分配記憶體。shared ptr p1 make shared shared ptr...

第十二章動態記憶體 allocator類

new和delete的兩部分操作 記憶體分配 釋放 和物件構造 析構 當分配一大塊記憶體時,我們計畫在這塊記憶體上按需構造物件,在此情況下希望記憶體分配和物件構造分離。這表示 我們可以分配大塊記憶體,但是只有真正需要時才執行物件建立操作 同時付出一定開銷 將記憶體分配和物件構造組合在一起可能會導致不...

第十二章 類和物件

類是多個類似事務組成的群體的統稱,能夠幫助我們快速理解和判斷事務的性質面向過程 物件導向 區別 面向過程 事務比較簡單,可以用線性的思維去解決,親力親為 物件導向 事務比較複雜,用簡單的線性思維無法解決 共同點 面向過程和物件導向都是解決實際問題的一種思維方式 總結 物件導向和面向過程相輔相成,二者...