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申請和釋放內存一樣

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM