智慧型指標之shared ptr

2021-07-16 22:15:46 字數 1165 閱讀 5394

在智慧型指標中,auto_ptr已經使用的越來越少了,特別是在c++11中,它已經被shared_ptr取代,原因主要有以下兩點:

1. auto_ptr不能保留指標所有權

class test

~test();

public:

int m_test;

};/*********************/

void fun(auto_ptrp1)

/*******************/

void main()

上述**中,主函式中的p作為引數傳遞給p1,此時p也就將所有權交給了p1,p1在fun函式執行完後釋放記憶體塊,而此時的p什麼都沒了,所以不再有訪問記憶體資料的權力了。

2.不能能指向物件陣列

這個缺點使得它不能和new一起使用

void main()

上述**執行時會出現乙個問題,當auto_ptr離開作用域時,會預設呼叫delete釋放記憶體空間,對於乙個物件顯然是沒有問題的,但是這裡的p指向的是乙個物件組,需要用delete來釋放記憶體,而如果繼續用delete就會有問題。

基於以上兩點,在實際中我們採用shared_ptr替代auto_ptr的功能。因為shared_ptr有乙個引用計數功能。話不多說,下面直接給出shared_ptr的實現**:

/****這裡僅給出核心部分的**********/

#include

using

namespace

std;

template

class

shared_ptr

~shared_ptr()

void deconstruct()

count--;

}t* operator&()

t& operator*()

//拷貝建構函式

shared_ptr(shared_ptr& sp) : m_ptr(sp.m_ptr), shared_count(sp.shared_count)

//賦值運算子

shared_ptr& operator=(shared_ptr& sp)

};

部分摘自:c++11智慧型指標

shared ptr智慧型指標

智慧型指標是乙個行為類似指標的物件。我們在使用堆記憶體時,都需要及時地進行釋放,避免造成記憶體洩漏。但我們偶爾也會忘記將其釋放掉,從而造成記憶體洩漏。並且,在釋放的時候,我們可能對某乙個指標進行了重複釋放,導致程式崩潰的問題。為了能夠解決這些問題,從而有了智慧型指標的設計。智慧型指標一共有四種,分別...

shared ptr(智慧型指標)

只要將 new 運算子返回的指標 p 交給乙個 shared ptr 物件 託管 就不必擔心在 寫delete p語句 實際上根本不需要編寫這條語句,託管 p 的 shared ptr 物件在消亡時會自動執行delete p。而且,該 shared ptr 物件能像指標 p 樣使用,即假設託管 p ...

智慧型指標shared ptr

shared ptr在脫離自己的作用域時候,會自動呼叫析構函式。作用域包含 塊 被呼叫函式 main函式等。include include include include using namespace std class a a int n private int n string str voi...