auto_ptr是當前c++標準庫(stl)中提供的一種智慧型指標,包含於標頭檔案 #include。auto_ptr 能夠方便的管理單個堆記憶體物件,在你不用的時候自動幫你釋放記憶體。
乙個版本的auto_ptr是linux和vs中使用的,另乙個是vc版本的,下面是vc版本的auto_ptr的源**剖析:
1 template2class
auto_ptr37
8 ~auto_ptr() //析構9
14}1516 auto_ptr(const auto_ptr<_ty> &_y):_owns(_y._owns),_ptr(_y.release()) //
拷貝構造
17{}
1819 auto_ptr<_ty>& operator=(const auto_ptr<_ty> &_y) //
拷貝賦值
2030 _owns = _y._owns; //
將pa1的擁有許可權轉移到pa231}
32else
if(_y._owns) //
如果pa1和pa2指向位址相同,判斷pa1是否有擁有權
3336 _ptr = _y.release(); //
將pa1擁有權釋放,並將pa1指標賦值給pa237}
38return *this; //
返回pa239}
4041
42 _ty& operator*() const
//過載*
4346
47 _ty* operator->() const
//過載->
4851
52 _ty* release() const
//將擁有許可權釋放,並返回指標
//常物件只能呼叫常方法所以要加const
5357
58private:59
bool _owns; //
加了mutable關鍵字,此變數就不受const的限制,但是不安全
60 _ty *_ptr;
61 };
當pa2 = pa1時 :
1.pa2 無指向 : 將pa1的指標給pa2賦值,再將pa1將擁有權進行轉移;
2.pa2 有指向不同於pa1的物件 : 將pa2的指向進行析構,再將pa1的指標給pa2賦值,將pa1的擁有權轉移;
3.pa2 有指向和pa1相同的物件 : 判斷pa1是否有擁有權,有則將pa1的擁有權轉移給pa2。
但vc版的auot_ptr也有一些問題,就是將擁有權轉移後,除了不能夠對其多次析構外,還可以對其進行操作,這就不好了,你都已經分手了,還不放手。在vs版本上對擁有權有更好的管理。
如果兩個指標指向乙個空間但是都沒有擁有權,最後需要用delete釋放。
auto ptr的VC版本原始碼剖析
auto ptr是當前c 標準庫 stl 中提供的一種智慧型指標,包含於標頭檔案 include。auto ptr 能夠方便的管理單個堆記憶體物件,在你不用的時候自動幫你釋放記憶體。乙個版本的auto ptr是linux和vs中使用的,另乙個是vc版本的,下面是vc版本的auto ptr的源 剖析 ...
KCP C 版本 原始碼解析
kcp send 對使用者的資料根據mss值進行分片,然後將分片後的資料放入snd queue。kcp flush,每次被呼叫的時候遍歷出隊snd queue 條件為snd nxt snd una cwnd 對每個seg的sn與una編號,cmd ikcp cmd push,進行初始化後,放入snd...
auto prt的VS版本原始碼剖析
通過對vc版本的auto ptr的源 得知vc版本還有一點小缺陷,又對vs版本的auto ptr做了一些剖析,具體 和注釋如下 1 假設全域性pa2都是用pa1來構造2 如 pa2 pa1 pa2 pa1 34 template auto ptr類宣告 5class auto ptr 67 temp...