首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > More Effective C++之28
【标  题】:More Effective C++之28
【关键字】:More,Effective,C++
【来  源】:http://blog.csdn.net/hanyu1980/archive/2006/07/18/937811.aspx

More Effective C++之28

条款28 Smart Pointer(智能指针)

       智能指针具有非常强大的能力,谨慎而明智的选择能带来极大的好处。我不否认智能指针的能力,虽然我在之前的否认过auto_ptr。可能由于我自身能力的限制,体会不到auto_ptr的好处,但这样的可能性我觉得已经不大了。但auto_ptr是最简单的智能指针,在它的周围存在大量的作品,这些作品包括Boost、Loki、ACE等等,但是可惜的是目前没有一个我能够说我很熟悉,那么本篇只是作为一个入门,在此基础上,应当阅读Boost、Loki、ACE相关源码。
Smart Pointer的核心是实现
template <class T>

T& SmartPointer<T>::operator*() const;

template <class T>

T& SmartPointer<T>::operator->() const;

       Smart Pointer的构造和析构是一门艺术,由此而衍生出很多不同类型的Smart Pointer。千万不要指望Smart Pointer的表现象原生指针,虽然可以通过隐式转换来实现它,然而往往带来的后果是灾难性的。

       Meyers给出了一个优雅的隐式转换的办法:
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可以,呜呼。这里地方需要注意四点技术:(1)函数调用的自变量匹配规则、(2)隐式型别转换函数、(3)template functions的暗自具现化、(4)member function templates。我承认,这有点太深入了。
在智能指针中const和non-const之间的转化也是很大的学问,我看了Meyers使用unions来做实现。这不是我喜欢的做法,我觉得风险还是比较大的。
Smart Pointer值得使用么?这不是我可以回答的问题,然而在以往的经验中,我似乎很少用到。也许是我的孤陋造成了这样的局面,但在更深层次来说,我需要阅读更多的Smart Pointer的实现。而且更加重要的是需要学会对Smart Pointer的调试,这似乎并不简单。
 
字符串逆序:【上一篇】
大内高手—惯用手法:【下一篇】
【相关文章】
  • 心理测试(C++)
  • 《TC++PL》第四章笔记——类型和声明
  • C++用bitset进行2进制输入输出
  • MFC中 windows object 和 C++ object
  • 一次关于旨在降低编译时间的整改工作(vc++)
  • 翻译——IvorHorton的Begining Visual C++ 2005 [第一章]
  • c++中指针,指针的引用,指针的指针的区别
  • C++程序与C程序的接口
  • 写C++程序要清楚自己的角色(孟岩)
  • 读书笔记一
  • 【随机文章】
  • 取得当前会话中的Identity值 -- SCOPE_IDENTITY()
  • 动态广告管理程序制作例子
  • 网络命令收集
  • 超实用指南助你解决Win XP常见问题
  • 趣味算法二例(2)
  • Rational RequisitePro的数据库配置-DB2,Oracle, SQL Server,Access
  • ASP.net组件编程中的两种事件编写方法
  • c#写系统日志
  • 软件的灵活与扩展
  • Java抽象类和接口的区别
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.