C++何時需要NEW對象
一、CString str;
- 不用new的內存區域是在棧,會自動分配空間,一般在局部變量時使用,函數結束后會自動釋放空間,
- 定義對象就是申明對象(靜態)
- str有系統創建並釋放,你不要擔心會出現內存泄露,但是生命期只有在本區域的大括號內,出了大括號就沒用了。
- 構造函數應可以保證被執行,因為程序退出通路很多,你必須是正常的退出才可能保證析構函數被調用,當你創建一個類對象時,構造函數就自動運行創建自己,當你不在需要這個對象時,析構函數自動把自己結束了(析構系統調用)。
二、CString *str1 = new CString;
- 用new的內在區域是在堆,要自己手動分配空間,使用完后要手動釋放空間,另外棧中空間的分配一般在編譯時就知道大小了,而如果要在運行時分配空間,就要使用堆了,
- new 就是創建對象的實例並為它分配足夠的空間(動態)
- str1是指針,要自己釋放,用不好很危險,用好了功能強大,因為他可以賦值給全局的變量,一下子從局部變量變成全局變量,還能把對象作為函數返回值。
- 指針指向這個對象,那么這個指針幾乎可以調用對象里的所有成員函數,看你想調誰,調析構函數就執行析構函數(自己調用)
1.只有變量才不需要New.
2.對象是引用型的,變量則是傳值型的
3.變量是棧存儲,而對象一般是堆
我們的推薦是:只要能在棧上創建對象,就在棧上創建;否則的話,如果你不得不需要更長的生命周期,只能選擇堆上創建
