首先我們應該了解棧和堆的差別:
詳細信息:傳送門
- 棧相當于函數自帶的存儲空間,在windows下一般為2M,在Linux下一般為8M,存取速度稍微快一點。
- 堆是系統的空間,相對較大,一般為2G,效率稍微慢一點,不過這點效率差距對于一般程序可以忽略不計。
棧上定義對象一般為類名 對象名;
,這個過程會調用構造函數,程序結束的時候會調用析構函數,不受程序員控制。
堆上定義對象一般使用new
運算符,同時會調用構造函數,需要手動調用delete
進行析構操作,容易造成內存泄漏問題(例如使用對象指針指向時),因此能在棧上創建對象盡量在棧上創建對象。
類中創建對象和這個類創建的地方有關。
全局變量和static變量,它們即不在堆上創建,也不在棧上創建。它們有自己的內存空間,是除堆和棧以外的數據區。