C++/CLI 是 ISO C++ 與通用語言基礎結構(CLI)的綁定。它保留 C++ 靜態物件模型的高效能與底層控制,同時引入 CLI 的動態元件模型、垃圾回收、反射、泛型等現代特性。Herb Sutter 將 C++ 比喻為「混凝土」語言——剛性強、難以動態修改;而 CLI 提供執行層(如 CLR)在作業系統與程式之間管理記憶體、型別安全與元件互通。
| 概念 | 原生 C++ | CLI / C++/CLI |
|---|---|---|
| 物件模型 | 靜態、編譯期決定 | 動態、執行期載入、反射 |
| 記憶體管理 | 手動 new/delete | 垃圾回收(GC) |
| 型別系統 | 類別、結構、聯合 | 參考型別、實值型別、介面 |
| 指標/參考 | 原始指標 * | 控制碼 ^、追蹤參考 % |
| 模板/泛型 | 編譯期模板 | 執行期泛型 |
ref class(參考型別)、value class(實值型別)、interface class(介面)。IDisposable/解構函式)。property、delegate、event、generic 等語法糖。gcnew 與 new 的語意差異,導致混合模式記憶體洩漏。pin_ptr),觸發 GC 重定位錯誤。C++/CLI 是 .NET 生態系中「最接近硬體、最貼近 C++ 精神」的語言。無論是維護舊有 C++ 代碼庫、開發高效能互通層、撰寫 SQL CLR 預存程序,它都是最佳切入點。