1. 程式人生 > >C++ 中的智慧指標-基礎

C++ 中的智慧指標-基礎

## 簡介 在現代 C++ 程式設計中,標準庫包含了智慧指標(Smart pointers)。 智慧指標用來確保程式不會出現記憶體和資源的洩漏,並且是"異常安全"(exception-safe)的。 ## 智慧指標的使用 智慧指標定義在標頭檔案 `memory` 裡的名稱空間 **`std`** 中。它對於*資源獲取即初始化(RAII, Resource Acquisition Is Initialization)* 程式設計理念至關重要。該理念的目的是保證物件初始化的時候也是資源獲取的時候,從而使物件的所有資源在單行程式碼中建立。 實踐中,*RAII* 的主要原則就是把任何在堆上分配的資源(比如動態分配的記憶體或者系統物件的處理)的所有權提供給在棧上分配的物件(其解構函式包含釋放資源及相關清理的程式碼)。 大多數時候,當你初始化一個原始指標或者資源控制代碼使其指向實際的資源時,立即將其傳給智慧指標。 在現代 C++ 中,原始指標只用於包含在區域性作用域,迴圈或者工具函式的小塊程式碼中(對效能有要求,並且對資源的所有權也不容易混淆)。 **原始指標和智慧指標的宣告比較如下:** ```cpp void UseRawPointer() { // Using a raw pointer -- not recommended. Song* pSong = new Song(L"Nothing on You", L"Bruno Mars"); // Use pSong... // Don't forget to delete! delete pSong; } void UseSmartPointer() { // Declare a smart pointer on stack and pass it the raw pointer. un