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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |