MoreEffectiveC++之智能指针

MoreEffectiveC++之智能指针,第1张

MoreEffectiveC++之智能指针,第2张

智能指针拥有非常强大的能力,谨慎明智的选择可以带来巨大的收益。我不否认智能指针的能力,虽然上一篇我否认了auto_ptr。可能由于自身的局限,我还不能意识到auto_ptr的好处,但我觉得这种可能性并不大。但auto_ptr是最简单的智能指针,围绕它有很多作品,包括Boost、Loki、ACE等。但遗憾的是,目前我还不能说对其中任何一个都很熟悉,所以本文只是一个介绍。在此基础上,我要看Boost,Loki,ACE的相关源代码。

智能指针的核心是实现。

template
T & smart pointer::operator *()const;
template
T & smart pointer::operator-->()const;

智能指针的构造和销毁是一门艺术,从中派生出许多不同类型的智能指针。不要期望智能指针像本机指针一样工作。虽然可以通过隐式转换实现,但后果往往是灾难性的。

Meyers给出了一个优雅的隐式转换方法:

template
class test template
{
public:
test template(T * ptr = 0):pointee(ptr){ }
template
operator test template()
{
return test template(pointee);
}
private:
T * pointee;

};

遗憾的是,这样的程序在VC6中是无法编译的。VC6似乎不支持将虚拟成员函数声明为模板,但VC7可以。在这里,我们需要注意四项技术:

(1)函数调用的参数匹配规则

(2)隐式类型转换函数

(3)模板函数的隐式实现

(4)成员函数模板.我承认,这有点太深奥了。

在智能指针中,常量和非常量之间的转换也是一门大学问。我看到迈耶斯利用工会来实现这一点。这不是我喜欢的。我觉得风险还是比较高的。

智能指针值得用吗?这不是我能回答的问题。不过,以以往的经验来看,我好像很少用。可能是我的无知造成了这种情况,但是更深层次的,我需要多读一些关于智能指针的实现。更何况,学习如何调试智能指针并不容易。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » MoreEffectiveC++之智能指针

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情