關於智慧型指標的種種

2021-07-12 01:05:36 字數 2763 閱讀 6243

1.std::auto_ptr

屬於stl在命名空間std下包含在標頭檔案下

(1)使用時盡量不使用=賦值,即使使用了也不要再用之前的物件

1

2

3

4

5

6

7

8

9

voidtestautoptr2()

}

最終如上**導致崩潰,如上**時絕對符合 c++ 程式設計思想的,居然崩潰了,跟進 std::auto_ptr 的原始碼後,我們看到,罪魁禍首是「my_memory2 = my_memory」,這行**,my_memory2 完全奪取了 my_memory 的記憶體管理所有權,導致 my_memory 懸空,最後使用時導致崩潰。

(2)    記住 release() 函式不會釋放物件,僅僅歸還所有權。

1

2

3

4

5

6

7

voidtestautoptr3()

}

執行結果為:?

1******: 1

看到什麼異常了嗎?我們建立出來的物件沒有被析構,沒有輸出「~******: 1」,導致記憶體洩露。當我們不想讓 my_memory 繼續生存下去,我們呼叫 release() 函式釋放記憶體,結果卻導致記憶體洩露(在記憶體受限系統中,如果my_memory占用太多記憶體,我們會考慮在使用完成後,立刻歸還,而不是等到 my_memory 結束生命期後才歸還)。

正確的**應該為:?

12

3

4

5

6

7

voidtestautoptr3()

}

或? 1

2

3

4

5

6

voidtestautoptr3()

}

原來 std::auto_ptr 的 release() 函式只是讓出記憶體所有權

2.shared_ptr

shared_ptr用法

示例一:

[cpp]view plain

copy

shared_ptr sp(new

int(10));                //乙個指向整數的shared_ptr  

assert(sp.unique());                            //現在shared_ptr是指標的唯一持有者

shared_ptr sp2 = sp;                       //第二個shared_ptr,拷貝建構函式   

assert(sp == sp2 && sp.use_count() == 2);       //兩個shared_ptr相等,指向同乙個物件,引用計數為2

*sp2 = 100;                                     //使用解引用操作符修改被指物件

assert(*sp == 100);                             //另乙個shared_ptr也同時被修改

sp.reset();                                     //停止shared_ptr的使用

assert(!sp);                                    //sp不再持有任何指標(空指標)

示例二:

[cpp]view plain

copy

class shared                                    //乙個擁有shared_ptr的類  

//建構函式初始化shared_ptr      

void print()                                //輸出shared_ptr的引用計數和指向的值      

};    

void print_func(shared_ptr p)                //使用shared_ptr作為函式引數  

int main()    

結論:在將shared_ptr用於函式引數時,會拷貝指標,增加其引用指數,函式結束後,引用計數減少。

關於智慧型指標

讀 c stragegies and tacitics 的時候看到了一段很nb的 是關於智慧型指標的 程式稍作修改,以便在編譯器上執行 1 include 2using namespace std 34 class string ptr 9string operator const 10operat...

關於C 智慧型指標

普通指標到智慧型指標的轉換 int iptr new int 42 shared ptrp iptr 智慧型指標到普通指標的轉換 int pi p.get 注意的地方 那就是不要將智慧型指標與普通指標混用。如果專案允許,堅持使用智慧型指標,避免原生指標。智慧型指標與普通指標需要特別特別特別的小心翼翼...

關於智慧型指標auto ptr

智慧型指標auto ptr和shared ptr也是面試中經常被問到的乙個 感覺看auto ptr的原始碼反而更加容易理解一些,因為原始碼的 量並不大,而且比較容易理解。本篇主要介紹auto ptr 其特點如下 1.首先auto ptr智慧型指標是個封裝好的類 2.是採用棧上的指標去管理堆上的內容,...