c++ 建立物件的三種方法
阿新 • • 發佈:2018-12-15
c++有三種方法建立物件
結合程式碼來看
1 #include <iostream> 2 using namespace std; 3 class Test { 4 5 private: 6 public: 7 add() 8 { 9 int x,y,sum; 10 x=5; 11 y=5; 12 sum=x+y; 13 cout<<sum<<endl; 14 } 15 }; 16 void main() 17 { 18 Test test1; //棧中分配 ,由作業系統進行記憶體的分配和管理 19 Test test2 = Test; //棧中分配 ,由作業系統進行記憶體的分配和管理 20 Test *test3=new Test(); //堆中分配 ,由管理者進行記憶體的分配和管理,用完必須delete(),否則可能造成記憶體洩漏 21 test1.add(); 22 test2.add();//"." 是結構體成員引用 23 test3->add();//"->"是指標引用 24 delete(test3); 25 system("pause"); 26 }
第一種和第二種沒什麼區別,一個隱式呼叫,一個顯式呼叫,兩者都是在程序虛擬地址空間中的棧中分配記憶體。棧是系統資料結構,對於執行緒/程序是唯一的,它的分配和釋放由作業系統決定,不需要由開發者來管理。在執行函式時,函式內區域性變數的儲存單元可以在棧上建立,函式執行完畢,系統會自動釋放這些儲存單元。第三種使用了new,在堆中分配了記憶體,堆上的記憶體分配,亦稱動態記憶體分配。程式在執行的期間用malloc申請的記憶體,這部分記憶體由程式設計師自己負責管理,其生存期由開發者決定:在何時分配,分配多少,並在何時用free來釋放該記憶體。這是唯一可以由開發者參與管理的記憶體。使用的好壞直接決定系統的效能和穩定。注意:棧中記憶體的分配和管理由作業系統決定,而堆中記憶體的分配和管理由管理者決定。
我們需要的記憶體很少,你又能確定你到底需要多少記憶體時,用棧。當你需要在執行時才知道你到底需要多少記憶體時,請用堆。
關於new建立類物件特點:
- new建立類物件需要指標接收,一處初始化,多處使用
- new建立類物件使用完需delete銷燬
- new建立物件直接使用堆空間,而區域性不用new定義類物件則使用棧空間
- new物件指標用途廣泛,比如作為函式返回值、函式引數等
- 頻繁呼叫場合並不適合new,就像new申請和釋放記憶體一樣