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