当前位置:天才代写 > tutorial > C语言/C++ 教程 > More Effective C++之智能指针

More Effective C++之智能指针

2017-11-06 08:00 星期一 所属: C语言/C++ 教程 浏览:563

智能指针具有很是强大的本领,审慎而明智的选择能带来极大的长处。我不否定智能指针的本领,固然我在之前的否定过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的调试,这好像并不简朴。

 

    关键字:

天才代写-代写联系方式