当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

More Effective C++之智能指针[VC/C++编程]

赞助商链接



  本文“More Effective C++之智能指针[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

智能指针具有非常强盛的本领,谨严而明智的挑选能带来极大的好处.我不否定智能指针的本领,固然我在之前的否定过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的调试,这仿佛并不简单.


  以上是“More Effective C++之智能指针[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • More Effective C++之效率
  • More Effective C++:避免缺省构造函数
  • <b>More Effective C++之考虑变更程序库</b>
  • <b>More Effective C++:差别new和delete</b>
  • <b>More Effective C++:不要重载的操作符</b>
  • <b>More Effective C++:自增和自减</b>
  • <b>More effective C++:谨慎利用异通例格</b>
  • More Effective C++:通过引用捕捉非常
  • More Effective C++:避免资源泄露
  • <b>More Effective C++:不利用多态性数组</b>
  • <b>More Effective C++:范例转换</b>
  • More Effective C++:指针与引用的辨别
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .