通過對vc版本的auto_ptr的源**得知vc版本還有一點小缺陷,又對vs版本的auto_ptr做了一些剖析,具體**和注釋如下:
1//假設全域性pa2都是用pa1來構造2//
如:pa2(pa1)、pa2=pa1
34 template //
auto_ptr類宣告
5class
auto_ptr;
67 template
8struct auto_ptr_ref //
auto_ptr的輔助類
912 _ty *_ref;
13};
1415 template
16class auto_ptr//
auto_ptr類
17 //
從原始指標中獲取控制權
2425
//若pa2(pa1);
26 auto_ptr(_myt& _right) : _myptr(_right.release()) //
拷貝構造
27{}
2829
//若:pa2(pa1)
30 auto_ptr(auto_ptr_ref<_ty>_right)
3137
38 template
39operator auto_ptr<_other>() //
轉換為可轉換的型別
4043
44 template
45operator auto_ptr_ref<_other>() //
隱式型別轉換,將auto_ptr型別指標轉換為auto_ptr_ref型別
4652
53 template
54 _myt& operator=(auto_ptr<_other>& _right) //
針對可轉換為 _ty* 型別的 _other* 型別的拷貝函式
5559
60 template //
特定型別建構函式
61 auto_ptr(auto_ptr<_other>&_right) : _myptr(_right.release())
62 {} //
針對可轉換為 _ty* 型別的 _other* 型別的建構函式
6364
//若:pa2=pa1
65 _myt& operator=(_myt& _right) //
拷貝賦值函式
6670
71//
若:pa2=pa1
72 _myt& operator=(auto_ptr_ref<_ty> _right) //
將乙個 auto_ptr_ref 型別的變數賦值給 *this
7379
80 ~auto_ptr() //
析構81
8485 _ty& operator*() const
//過載*
8691
return (*get
());92}
9394 _ty *operator->() const
//過載->
9598
99 _ty *get() const
//用來返回_myptr的位址
100103
104 _ty *release() //
將乙個物件的_myptr記住,再指向空,然後再把其記住的位址返回
105110
111void reset(_ty *_ptr = 0) //
將this的_myptr指向傳進來的指標的位址
112118
119private
:120 _ty *_myptr;
121 };
測試**:
1int main(int argc, char*ar**)
2
執行結果:
1010
20
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 ptr的VC版本原始碼剖析
auto ptr是當前c 標準庫 stl 中提供的一種智慧型指標,包含於標頭檔案 include。auto ptr 能夠方便的管理單個堆記憶體物件,在你不用的時候自動幫你釋放記憶體。乙個版本的auto ptr是linux和vs中使用的,另乙個是vc版本的,下面是vc版本的auto ptr的源 剖析 ...
auto ptr的VC版本原始碼剖析
auto ptr是當前c 標準庫 stl 中提供的一種智慧型指標,包含於標頭檔案 include。auto ptr 能夠方便的管理單個堆記憶體物件,在你不用的時候自動幫你釋放記憶體。乙個版本的auto ptr是linux和vs中使用的,另乙個是vc版本的,下面是vc版本的auto ptr的源 剖析 ...