建湖做網(wǎng)站尋找鄭州網(wǎng)站優(yōu)化公司
智能指針的源碼都在 《memory》 頭文件中。因為頭文件太長,再者本次整理是基于以前的零散的模板分析。故相當(dāng)于抽取了該頭文件中關(guān)于智能指針的源碼進行分析,注釋。
(1 探討一)當(dāng)獨占指針指向數(shù)組時,其默認的刪除器是哪個?相關(guān)模板的定義輪廓如下:
我們要分析、猜測編譯器在泛型推導(dǎo)時是如何確定模板參數(shù)的類型的。先給出一段源碼,如下:
測試如下:
以及:
以及:
STL 庫代碼肯定是不會錯的??梢缘贸鼋Y(jié)論啊: unique_ptr 聲明時的模板參數(shù) _Ty 的含義不同于模板定義時的模板參數(shù) _Ty, 模板聲明時的刪除器的默認值是對第一個模板實參的整體取 default_delete<_Ty[]> ,所以選擇了正確的刪除器模板。
(2 探討二) 獨占指針可以指向數(shù)組,對其成員函數(shù) reset 的形參,應(yīng)該提供數(shù)組指針,而不是普通指針。源碼摘抄如下:
增加一些打印語句:
以及:
但又測試了一下:
(3 探討三) 獨占指針的內(nèi)存模型。獨占指針的構(gòu)造還是比較簡單的,因為不需要考慮資源共享,獨占指針其實就是對裸指針的封裝。摘抄的源代碼如下:
(4 探討四) 對 make_unique 函數(shù)的形參,若創(chuàng)建指向數(shù)組的獨占指針,函數(shù)形參是數(shù)組的長度;若創(chuàng)建指向普通對象的獨占指針,函數(shù)形參是要傳遞給對象的構(gòu)造函數(shù)的。依據(jù)源碼如下:
該圖中出現(xiàn)了 extent_V 模板的使用,其源碼如下:
比較難以理解,給出幾個測試結(jié)果如下:、
(5)