1. 程式人生 > >c++ 建立物件的三種方法

c++ 建立物件的三種方法

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申請和釋放記憶體一樣