c 基礎 使用智慧型指標

2021-09-06 14:32:52 字數 1084 閱讀 6967

三個智慧型指標模板(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...