国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

More Effective C++之智能指針

2019-11-17 05:27:54
字體:
供稿:網(wǎng)友

  智能指針具有非常強大的能力,謹慎而明智的選擇能帶來極大的好處。我不否認智能指針的能力,雖然我在之前的否認過auto_ptr。可能由于我自身能力的限制,體會不到auto_ptr的好處,但這樣的可能性我覺得已經(jīng)不大了。但auto_ptr是最簡單的智能指針,在它的四周存在大量的作品,這些作品包括Boost、Loki、ACE等等,但是可惜的是目前沒有一個我能夠說我很熟悉,那么本篇只是作為一個入門,在此基礎上,應當閱讀Boost、Loki、ACE相關(guān)源碼

  Smart Pointer的核心是實現(xiàn)

template <class T>
T& SmartPointer<T>::Operator*() const;
template <class T>
T& SmartPointer<T>::operator->() const;
  Smart Pointer的構(gòu)造和析構(gòu)是一門藝術(shù),由此而衍生出很多不同類型的Smart Pointer。千萬不要指望Smart Pointer的表現(xiàn)象原生指針,雖然可以通過隱式轉(zhuǎn)換來實現(xiàn)它,然而往往帶來的后果是災難性的。

  Meyers給出了一個優(yōu)雅的隱式轉(zhuǎn)換的辦法:

template<class T>
class TestTemplate
{
public:
TestTemplate(T* ptr = 0):pointee(ptr){}
template<class newType>
operator TestTemplate<newType>()
{
return TestTemplate<newType>(pointee);
}
PRivate:
T* pointee;

};
  可惜這樣的程序在VC6中無法通過編譯,似乎VC6不支持將novirtual member function聲明成templates,但是VC7可以。這里地方需要注重四點技術(shù):

  (1)函數(shù)調(diào)用的自變量匹配規(guī)則

  (2)隱式型別轉(zhuǎn)換函數(shù)

  (3)template functions的暗自具現(xiàn)化

  (4)member function templates。我承認,這有點太深入了。

  在智能指針中const和non-const之間的轉(zhuǎn)化也是很大的學問,我看了Meyers使用unions來做實現(xiàn)。這不是我喜歡的做法,我覺得風險還是比較大的。

  Smart Pointer值得使用么?這不是我可以回答的問題,然而在以往的經(jīng)驗中,我似乎很少用到。也許是我的孤陋造成了這樣的局面,但在更深層次來說,我需要閱讀更多的Smart Pointer的實現(xiàn)。而且更加重要的是需要學會對Smart Pointer的調(diào)試,這似乎并不簡單。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴南区| 洞口县| 平度市| 大同市| 涿鹿县| 大邑县| 清河县| 庆元县| 太白县| 双鸭山市| 望谟县| 武功县| 济源市| 来宾市| 宜章县| 吴忠市| 红原县| 天门市| 襄樊市| 福建省| 子长县| 荥经县| 奉新县| 抚顺市| 东港市| 姚安县| 福清市| 永靖县| 明溪县| 孝昌县| 谢通门县| 南安市| 祁阳县| 兖州市| 九寨沟县| 乌拉特中旗| 长武县| 平武县| 分宜县| 仪征市| 澜沧|