青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Note of Justin

關(guān)于工作和讀書的筆記

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  47 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

留言簿(14)

搜索

  •  

積分與排名

  • 積分 - 53597
  • 排名 - 433

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

[原創(chuàng)文章歡迎轉(zhuǎn)載,但請(qǐng)保留作者信息]
Justin 于 2010-04-26


看完以后覺得講的其實(shí)是如何用模板函數(shù)來讓拷貝構(gòu)造函數(shù)和賦值運(yùn)算符接受所有可能的輸入。

首先對(duì)于內(nèi)建類型的對(duì)象,他們作為函數(shù)參數(shù)時(shí),參數(shù)的類型轉(zhuǎn)換是自動(dòng)發(fā)生的。比如說派生類對(duì)象的指針,如果需要,會(huì)被轉(zhuǎn)換為其父類對(duì)象的指針。
而對(duì)于智能指針,要完成類似的轉(zhuǎn)換需要編寫額外的代碼才能實(shí)現(xiàn)。
如書中例子所示,如果類Base是類Derived的父類,對(duì)于下面的一個(gè)模板類:
template?<typename?T>
class?SmartPointer?{
public:
???
explicit?SmartPointer(T?*?pointer);
//..
}

經(jīng)管這兩個(gè)智能指針指向的對(duì)象是有繼承關(guān)系的,SmartPointer<Base>和SmartPointer<Derived>對(duì)于編譯器來說完全沒有聯(lián)系。
于是,如果一個(gè)函數(shù)聲明了接受一個(gè)SmartPointer<Base>類型的參數(shù),就無法給它傳進(jìn)一個(gè)SmartPointer<Derived>類型的指針了。

為了能夠讓智能指針對(duì)象也具備一般指針的隱式轉(zhuǎn)換能力,首先可以做的工作是改造智能指針的構(gòu)造函數(shù),讓對(duì)象生成的時(shí)候可以依照具體情況“變態(tài)”成實(shí)際需要的對(duì)象類型。好吧,那我們現(xiàn)在就開始做……
打住!有兩個(gè)問題需要考慮:第一是我們?cè)趺粗乐悄苤羔槝?gòu)造函數(shù)的輸入?yún)?shù)pointer是什么類型?又怎么知道真正需要的目標(biāo)類型是什么?如果不知道我們?cè)趺磳戇@個(gè)構(gòu)造函數(shù)?第二是就算我們知道了輸入的類型和生成的類型,有多少種這樣的搭配是SmartPointer需要接受的?如果有100對(duì)不同的類型搭配,我們就要寫100種構(gòu)造函數(shù)嗎?
解決這些問題的辦法:用“模板化”的構(gòu)造函數(shù)。(member function templates)
template?<typename?T>
class?SmartPointer?{
public:
???template?
<typename?U>
???SmartPointer(
const?SmartPointer<U>&?input)?:?myPointer(?input.get()?)
???{
//..
???}
???T
*?get()?const?{?return?myPointer;?}
???
//..
private:
???T
*?myPointer;
};

上面的方案?jìng)€(gè)人感覺很繞,不過確實(shí)也解決了問題。
大概分析一下:
  • 其中的構(gòu)造函數(shù)是一個(gè)模板函數(shù),接受參數(shù)為U類型的對(duì)象,構(gòu)造出指向T的指針。
  • 但是很明顯我們不需要一個(gè)能夠接受任意類型再生成任意類型對(duì)象的構(gòu)造函數(shù)。這樣會(huì)天下大亂的。于是就有了get()對(duì)myPointer的初始化:構(gòu)造函數(shù)的輸入?yún)?shù)input所持有的指針是可以用get()來得到的,然后有這個(gè)“get”來的指針去初始化目標(biāo)對(duì)象所持有的指針,到了這一步,就和一般指針的隱式轉(zhuǎn)換沒有差別了:
    • 如果可以轉(zhuǎn)換,智能指針SmartPointer<U>就順利轉(zhuǎn)換為SmartPointer<T>;
    • 如果不能轉(zhuǎn)換,構(gòu)造函數(shù)就失敗。
  • 這里的構(gòu)造函數(shù)沒有explicit修飾,因此類型的轉(zhuǎn)換是隱式的。如果真有這個(gè)必要,就加上explicit,這樣就需要顯式地聲明需要進(jìn)行類型轉(zhuǎn)換。
  • 當(dāng)一個(gè)類沒有定義自己的構(gòu)造函數(shù)時(shí)(包括賦值構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù)),編譯器會(huì)“幫你”創(chuàng)建默認(rèn)的構(gòu)造函數(shù)。編譯器不會(huì)理睬“模板化”的構(gòu)造函數(shù),如果一個(gè)類中只有“模板化”的構(gòu)造函數(shù),它還是會(huì)繼續(xù)生產(chǎn)默認(rèn)的構(gòu)造函數(shù)。因此,如果不想讓編譯器做多余的事,就有必要自己寫好非模板化的構(gòu)造函數(shù),以此讓編譯器“閉嘴”@#¥%
posted on 2010-04-26 08:45 Justin.H 閱讀(1404) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Effective C++ 炒冷飯
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            激情久久中文字幕| 亚洲欧美国产精品va在线观看| 亚洲精品久久久久中文字幕欢迎你| 国产精品99一区| 欧美电影免费网站| 激情综合五月天| 亚洲免费视频网站| 亚洲综合激情| 欧美色欧美亚洲另类二区| 亚洲电影毛片| 亚洲国产精品久久久久秋霞影院 | 香蕉久久夜色精品国产| 99精品99久久久久久宅男| 久久人人九九| 免费国产一区二区| 在线观看成人av| 久久精品国产精品| 久久久久一区二区三区| 国产色视频一区| 欧美呦呦网站| 久久久久一区二区三区| 狠狠色丁香久久综合频道| 性视频1819p久久| 久久av一区二区三区漫画| 国产精品你懂的在线| 亚洲天堂第二页| 欧美一区二区在线播放| 国产美女一区二区| 午夜精品www| 久久久久成人网| 黑人巨大精品欧美一区二区小视频 | 欧美日韩伦理在线免费| 亚洲精品系列| 亚洲欧美日本日韩| 国产欧美日韩不卡| 久久国产精品亚洲77777| 另类尿喷潮videofree| 在线精品视频在线观看高清| 久久一区二区三区国产精品| 免费观看国产成人| 亚洲美女视频在线免费观看| 欧美伦理91| 亚洲一区二区四区| 久久一区中文字幕| 亚洲精选国产| 国产精品乱码| 久久免费观看视频| 亚洲精品视频中文字幕| 亚久久调教视频| 一区二区三区在线看| 欧美久久九九| 欧美伊人精品成人久久综合97| 蜜桃久久av| 亚洲天堂成人在线视频| 国产免费观看久久黄| 久久综合色8888| 9色国产精品| 免费成人高清| 欧美一区二区三区男人的天堂| 好吊日精品视频| 欧美日韩成人一区| 久久久久久久91| 亚洲校园激情| 亚洲第一主播视频| 欧美一区二区在线看| 亚洲激情专区| 国产日韩欧美三级| 欧美精品成人一区二区在线观看| 亚洲影视综合| 亚洲激情国产| 久久综合色播五月| 午夜视频久久久| av成人免费在线| 在线电影国产精品| 国产欧美精品日韩| 欧美日韩一区二区三区在线 | 国产一区三区三区| 欧美日韩国内自拍| 久久中文字幕导航| 西西裸体人体做爰大胆久久久| 亚洲破处大片| 亚洲大胆视频| 久久这里有精品视频| 亚洲欧美国产三级| av成人手机在线| 亚洲高清视频在线观看| 国产一区二区三区在线播放免费观看 | 在线看片第一页欧美| 国产欧美日韩91| 国产精品国内视频| 欧美日韩国产在线播放网站| 老司机午夜精品视频| 久久精品国产99国产精品澳门| 亚洲一区二区三区精品动漫| 一本一本久久a久久精品牛牛影视| 欧美福利网址| 欧美激情日韩| 欧美黄色免费| 欧美激情视频给我| 欧美国产在线视频| 欧美jizzhd精品欧美喷水| 久久人体大胆视频| 久久色在线播放| 麻豆国产va免费精品高清在线| 久久精品一级爱片| 久久精品国产一区二区三| 欧美一级淫片aaaaaaa视频| 亚洲在线免费观看| 亚洲无吗在线| 亚洲男人av电影| 亚洲欧美怡红院| 欧美在线免费播放| 久久久国产精品一区| 玖玖国产精品视频| 欧美不卡在线| 亚洲国产老妈| 夜夜嗨av色一区二区不卡| 亚洲素人在线| 久久精品久久综合| 久久综合色播五月| 欧美欧美在线| 国产精品久久久一区麻豆最新章节| 国产精品久久久久久久久久免费看| 欧美三级中文字幕在线观看| 国产精品久久久久9999高清| 国产日韩欧美一区二区三区四区| 国产亚洲成av人在线观看导航| 黄色综合网站| 亚洲毛片在线看| 亚洲免费在线视频| 麻豆av一区二区三区久久| 亚洲激情六月丁香| 亚洲在线1234| 久久琪琪电影院| 欧美伦理91i| 国产亚洲在线| 亚洲日本欧美日韩高观看| 亚洲一品av免费观看| 久久一区二区三区国产精品| 亚洲国产综合91精品麻豆| 一区二区三区日韩在线观看| 久久精品人人做人人综合 | 久久久久久久精| 欧美精品一区二区三| 国产欧美欧洲在线观看| 亚洲经典一区| 久久爱91午夜羞羞| 亚洲激精日韩激精欧美精品| 亚洲在线一区| 欧美激情aⅴ一区二区三区| 国产精品久久久久av免费| 最新国产精品拍自在线播放| 亚洲欧美综合精品久久成人| 欧美黑人多人双交| 先锋资源久久| 欧美日韩国产专区| 在线看不卡av| 久久精品免视看| 亚洲另类视频| 噜噜噜久久亚洲精品国产品小说| 国产精品视频免费| 亚洲美女电影在线| 久久这里只有精品视频首页| 中文日韩在线视频| 免费欧美日韩| 在线观看91精品国产麻豆| 欧美在线日韩在线| 在线中文字幕不卡| 欧美日韩国产在线看| 亚洲黄色性网站| 老妇喷水一区二区三区| 亚洲一区二区在线免费观看视频| 欧美精品综合| 日韩视频久久| 亚洲福利专区| 久久看片网站| 1024国产精品| 另类酷文…触手系列精品集v1小说| 亚洲欧美成人| 国产精品一区二区三区四区五区| 在线一区日本视频| 亚洲蜜桃精久久久久久久| 欧美激情精品久久久久久变态| 亚洲第一视频| 欧美成年人在线观看| 久久久久成人精品| 在线看不卡av| 欧美成人精品一区二区三区| 久久久亚洲国产天美传媒修理工 | 国产欧美在线视频| 久久av一区二区三区| 性一交一乱一区二区洋洋av| 国产精品一二| 久久国产精品久久久久久| 亚洲欧美精品伊人久久| 国产欧美日韩免费| 久久久久久9| 久久久久久久久蜜桃| 亚洲国产精品第一区二区三区| 麻豆精品视频在线观看视频|