浏览主站 | 站长合租 | 新闻资讯 | 站长学院 | 站长盈利 | HTML教程 | 网址导航 | 站长周刊 | 会员投稿 | 滚动新闻 | RSS
发新话题
打印

More Effective C 之智能指针

More Effective C 之智能指针

[[wiki]wiki[/wiki]][/wiki]智能指针具有非常强大的能力,谨慎而明智的选择能带来极大的好处。我不否认智能指针的能力,虽然我在之前的否认过auto_ptr。可能由于我自身能力的限制,体会不到auto_ptr的好处,但这样的可能性我觉得已经不大了。但auto_ptr是最简单的智能指针,在它的周围存在大量的作品,这些作芠wiki]钒[/wiki]˙oost、Loki、ACE等等,但是可惜礫wiki]氖[/wiki]悄壳懊挥幸桓鑫夷芄凰滴液苁煜ぃ敲幢酒皇亲魑桓鋈朊[wiki]牛[/wiki]诖嘶∩希Φ痹亩罛oost、Loki、ACE相关源码。  Smart Pointer的核心是实现template <class T>T& SmartPointer<T>::operator*() const; template <class T>T& SmartPointer<T>::operator->() const;  Smart Pointer的构造和析构是一门艺术,由此而衍生出很多不同[wiki]类[/wiki]型的Smart Pointer。千万不要指望Smart Pointer的表现象原生指针,虽然可以通过隐式转换来实现它,然而往往带来的后果是灾难性的。  Meyers给出了一个优雅的隐式转换的办法:template<class T>class [wiki]Test[/wiki]Template{public:TestTemplate(T* ptr = 0):pointee(ptr){}template<class new[wiki]type[/wiki]>operator TestTemplate<newType>(){return TestTemplate<newType>(pointee);}private:T* pointee;};  可惜这样的[wiki]程序[/wiki]在[wiki]VC[/wiki]6中无法通过编译,似乎VC6不支持将novirtual member function声明成templates,但是VC7可以。这里地方需要注意四点[wiki]技术[/wiki]:  (1)函数调用的自变量匹配规则  (2)隐式型别转换函数  (3)template functions的暗自具现化  (4)member function templates。我承认,这有点太深入了。  在智能指针中const和non-const之间的转化也是很大的学问,我看了Meyers使用unions来做实现。这不是我喜欢的做法,我觉得风险还是比较大的。  Smart Pointer值得使用么?这不是我可以回答的问题,然而在以往的经验中,我似乎很少用到。也许是我的孤陋造成了这样的局面,但在更深层次来说,我需要阅读更多的Smart Pointer的实现。而且更加重要的是需要学会对Smart Pointer的调试,这似乎并不简单。

TOP

发新话题