C/C++ 支援三種管理方式:堆疊基礎(自動)、堆疊動態(手動/智慧指標)、全域區靜態(程式壽命)。C# 採 GC(垃圾回收),C++ 採 RAII(資源取得即初始化),兩種截然不同哲學。
as 運算子保證轉換安全。using 區塊提供確定性釋放與異常安全,為主流建議。基本手法:為資源撰寫 guard 類別,建構函式取得資源,解構函式釋放資源。
struct lock_guard {
lock_guard() { lock(); }
~lock_guard() { unlock(); }
};
物件生命週期綁定資源生命週期,區域物件離開作用域自動釋放,具備異常安全。
new/delete 或智慧指標 (unique_ptr, shared_ptr),適用共享/長生命週期資源。絕大多數資源屬「取得-使用-釋放」模式(同步物件、檔案鎖、GDI 物件),前兩種策略足夠。僅少數「一次取得、多方擁有、一次釋放」資源需共享所有權。
循環引用導致引用計數失效(A→B, B→A 永不歸零)。但 C++ 中生存期循環依賴極罕見:要麼互相解構崩潰,要麼互不解構洩漏,正常編程不會出現。引用計數 (shared_ptr) 足以解決幾乎所有資源管理問題。
shared_ptr 完美適用。shared_ptr、子用裸指標/弱指標。GC 語言放棄解構函式(解構函式破壞 GC 原子性),故無法實現 RAII,僅能管理記憶體,其他資源仍需手動釋放。C# using 緩解但未徹底解決。C++ 保留底層能力,RAII 以近零負擔提供確定性、異常安全的資源管理——相對 C 幾乎無副作用的明顯進步。