三個智慧型指標模板(auto_ptr、unique_ptr和shard_ptr)都定義了類似指標的物件(c++11已將auto_ptr摒棄),可以將new獲得(直接或間接)
的位址賦給這種物件。當智慧型指標過期時,其析構函式將使用delete來釋放記憶體。因此,如果將new返回的位址賦給
這些物件,將無需記住稍後釋放這些記憶體:在智慧型指標過期時,這些記憶體將自動被釋放。
下圖說明了auto_ptr和常規指標在行為方面的差另:share_ptr和unique_ptr的行為與auto_ptr相同
使用智慧型指標必須包含標頭檔案memory檔案模板定義。然後使用通常的械板語法來例項化所需型別的指標。
auto_pter包含如下的建構函式
template
class auto_ptr
{public:
explicit auto_ptr(x * p=0)throw();
thro()意味著建構函式不會引發異常;與auto_ptr一樣,throw()也被摒棄。因此請求x型別的auto_ptr將獲得乙個
指向x型別的auto_ptr:
auto_ptrpd(new double);
auto_ptrps(new string);
new double 是new返回的指標,指向新分配的記憶體塊。它是建構函式auto_ptr的引數,即對應於
原型中形參p的實參。同樣,new string 也是建構函式的實參。其它兩種智慧型指標使用同樣的語法:
unique_ptrpdu(new double);
shared_ptrpss(new string);
我們可以這麼用它
#include
void remodel(std::string & str)
std::auto_ptrps(new std::string(str));
if(error)
throw exception();
str=*ps;
return ;
智慧型指標模板位於命名空間std中。
c 基礎 智慧型指標
設計原理 將基本型別指標封裝為類物件指標 這個類肯定是個模板,以適應不同基本型別的需求 並在析構函式裡編寫delete語句刪除指標指向的記憶體空間。auto ptr 則c 會把m example所指向的記憶體 使m example1 的值為null,所以在c 中,應絕對避免把auto ptr放到容器...
C 智慧型指標使用
由於 c 語言沒有自動記憶體 機制,程式設計師每次 new 出來的記憶體都要手動 delete。程式設計師忘記 delete,流程太複雜,最終導致沒有 delete,異常導致程式過早退出,沒有執行 delete 的情況並不罕見。std auto ptr boost scoped ptr boost ...
c 智慧型指標基礎詳解
在現代 c 程式設計中,標準庫包含了智慧型指標 smart pointers 智慧型指標用來確保程式不會出現記憶體和資源的洩漏,並且是 異常安全 exception safe 的。智慧型指標定義在標頭檔案 memory 裡的命名空間 std 中。它對於資源獲取即初始化 raii,resource a...