C++ 無值/參考類型之分,但理解堆疊與堆兩大記憶體區域,即可洞悉 C# 類型系統的設計邏輯。
new/delete 控制生命週期#include <iostream>
using namespace std;
class Human {
public:
void Talk() { cout << "Hello" << endl; }
~Human() { cout << "析構函數在工作..." << endl; }
private:
int age;
};
int main() {
Human h; // 堆疊物件
cout << "h 大小: " << sizeof(h) << endl;
cout << "h 位址: " << &h << endl;
h.Talk();
Human *p = new Human(); // 堆物件
cout << "p 大小: " << sizeof(p) << endl; // 指標大小
cout << "p 位址: " << p << endl;
p->Talk();
delete p; // 必須手動釋放
// p 位址仍存在,但指向記憶體已無效
// 建議 delete 後 p = nullptr;
return 0;
}

| C++ 概念 | C# 對應 |
|---|---|
| 堆疊上的值型別 | 值類型 |
| 堆上的參考型別 | 參考類型 |
| 自動銷毀 | 值類型離開作用域即銷毀 |
| 手動管理/GC | 參考類型由垃圾回收器管理 |
C# 將簡單型別、結構體定為值類型(隱含堆疊語義),類別定為參考類型(隱含堆語義),並引入 GC 解決手動管理風險,這正是從 C++ 經驗演進而來的設計決策。