回覆列表
  • 1 # LOL唐頭大

    C++何時需要NEW的情況如下:

    一、CString str;

    不用new的記憶體區域是在棧,會自動分配空間,一般在區域性變數時使用,函式結束後會自動釋放空間,

    定義物件就是申明物件(靜態)

    str有系統建立並釋放,你不要擔心會出現記憶體洩露,但是生命期只有在本區域的大括號內,出了大括號就沒用了。

    建構函式應可以保證被執行,因為程式退出通路很多,你必須是正常的退出才可能保證解構函式被呼叫,當你建立一個類物件時,建構函式就自動執行建立自己,當你不在需要這個物件時,解構函式自動把自己結束了(析構系統呼叫)。

    二、CString *str1 = new CString;

    用new的內在區域是在堆,要自己手動分配空間,使用完後要手動釋放空間,另外棧中空間的分配一般在編譯時就知道大小了,而如果要在執行時分配空間,就要使用堆了,

    new 就是建立物件的例項併為它分配足夠的空間(動態)

    str1是指標,要自己釋放,用不好很危險,用好了功能強大,因為他可以賦值給全域性的變數,一下子從區域性變數變成全域性變數,還能把物件作為函式返回值。

    指標指向這個物件,那麼這個指標幾乎可以呼叫物件裡的所有成員函式,看你想調誰,調解構函式就執行解構函式(自己呼叫)。

  • 2 # 程式碼Go說科技

    先要搞明白為什麼要用new來生成物件。程式可以使用的記憶體,由棧記憶體和堆記憶體。

    棧記憶體是系統自管理的,使用起來非常方便,但是也有其自身不足。棧的大小在Windows平臺一般是2M,也有1M的說法。總之,是大小固定且受限的。

    堆記憶體是需要程式設計師管理。可用的大小也是以G為單位的,缺點需要手工管理。在C++中使用new操作申請的記憶體,就是佔用堆記憶體大小,釋放時需要顯示編寫delete語句。

    綜上所述,佔用記憶體較大或者複雜的物件使用new操作。

  • 中秋節和大豐收的關聯?
  • 鯨是什麼動物?