在智慧型指標中,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...