C++ 語言/間接/智慧指標/原始指標的風險
外觀
在實現其中一個函式時,您可能希望動態分配記憶體(使用 CRType* poRaw = new CRType;),您打算在函式結束時釋放記憶體(使用 delete poRaw;)。但是,如果在函式執行過程中丟擲未處理的異常,這將導致記憶體洩漏。
除了將區域性變數的型別設定為原始指標外,還可以將其設定為區域性物件變數(初始化為 CRSmart poSmart(new CRType);)。每當 poSmart 超出範圍(即使是由於異常)時,該區域性物件的解構函式都會被呼叫。因此,我們可以將執行 delete 的責任從我們手動編寫的函式轉移到這個 CRSmart "智慧指標" 類的解構函式中。
C++ 提供了一些內建的智慧指標類,它們的工作原理類似。