auto prt的VS版本原始碼剖析

2021-09-29 22:43:18 字數 2098 閱讀 1373

通過對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 };

測試**:

1

int 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的源 剖析 ...