首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 類與物件:堆疊與堆上實例化的記憶體管理差異

     編輯:關於C++

核心概念

  • 堆疊實例化:區域變數,離開作用域自動銷毀,記憶體由系統管理
  • 堆上實例化:new 配置,需手動 delete 釋放,否則記憶體洩漏

程式碼範例

#include 
#include 
using namespace std;

class Location {
public:
    int x, y;
    void printX() { cout << x << endl; }
    void printY() { cout << y << endl; }
};

int main() {
    // 堆疊實例化
    Location loc1;
    loc1.x = 10; loc1.y = 20;
    loc1.printX(); loc1.printY(); // 自動銷毀

    // 堆上實例化
    Location* p = new Location();
    if (!p) {
        cout << "記憶體配置失敗" << endl;
        return -1;
    }
    p->x = 100; p->y = 200;
    p->printX(); p->printY();
    delete p;   // 必須釋放
    p = nullptr; // 避免野指標
    return 0;
}

關鍵差異總結

特性堆疊堆
配置速度極快(指針移動)較慢(尋找空閒塊)
大小限制較小(~MB 級)大(受限於虛擬記憶體)
生命週期作用域綁定手動控制
碎片問題無可能產生
適用場景小型、短生命週期物件大型、動態生命週期物件

最佳實踐

  1. 優先使用堆疊物件(RAII)
  2. 堆上配置搭配智慧指標(unique_ptr/shared_ptr)自動管理
  3. delete 後立即置 nullptr
  4. 避免在建構子中拋出異常導致資源洩漏
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved