C++何時需要NEW對象,new和定義對象的區別


C++何時需要NEW對象

 

一、CString str;

  1. 不用new的內存區域是在棧,會自動分配空間,一般在局部變量時使用,函數結束后會自動釋放空間,
  2. 定義對象就是申明對象(靜態)
  3. str有系統創建並釋放,你不要擔心會出現內存泄露,但是生命期只有在本區域的大括號內,出了大括號就沒用了。
  4. 構造函數應可以保證被執行,因為程序退出通路很多,你必須是正常的退出才可能保證析構函數被調用,當你創建一個類對象時,構造函數就自動運行創建自己,當你不在需要這個對象時,析構函數自動把自己結束了(析構系統調用)

 

二、CString *str1 = new CString;

  1. new的內在區域是在堆,要自己手動分配空間,使用完后要手動釋放空間,另外棧中空間的分配一般在編譯時就知道大小了,而如果要在運行時分配空間,就要使用堆了,
  2. new 就是創建對象的實例並為它分配足夠的空間(動態)
  3. str1是指針,要自己釋放,用不好很危險,用好了功能強大,因為他可以賦值給全局的變量,一下子從局部變量變成全局變量,還能把對象作為函數返回值。
  4. 指針指向這個對象,那么這個指針幾乎可以調用對象里的所有成員函數,看你想調誰,調析構函數就執行析構函數(自己調用)

 

1.只有變量才不需要New.

2.對象是引用型的,變量則是傳值型的

3.變量是棧存儲,而對象一般是堆

 

我們的推薦是:只要能在棧上創建對象,就在棧上創建;否則的話,如果你不得不需要更長的生命周期,只能選擇堆上創建

 


免責聲明!

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



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