2009年2月18日星期三

引用计数和智能指针

Nebula3使用传统的引用计数来管理对象的生命周期。从程序员的角度来看一个模板智能指针类Ptr<>的存在隐藏了引用计数的细节。做为一般规则,总是使用智能指针指向从RefCounted继承的对象,除非你可以确定在给定的代码块,对象的引用计数不会被改变。

智能指针比普通指针具有的优点:

1.获取一个空指针时,智能指针将给你一个简单调试断言而不是内存错误
2.在引用计数对象中你从不必调用AddRef()或者Release()方法(实际上如果你调用了,会有一些严重的错误)
3.智能指针可以很好地工作在容器类内,一个智能指针数组代替普通指针消除了各种生命周期管理问题,你从不需要关心指针后面对象的释放,数组的行为看起来像包含真的C++对象
4.使用智能指针,你一般不需要像普通指针那样经常定义“对象所属关系”(谁要负责删除对象,等等...)

智能指针的缺点:

1.性能:拷贝和赋值智能指针时包含调用AddRef()和/或Release()方法,间接引用一个智能指针包含一个检查智能指针所包含的对象指针是否有效的断言检查。由此产生的性能问题一般被忽略,但在内部循环你必须意识到这一点。

2.原本要销毁的对象还一直存在着:由于使用智能指针管理对象,只有当最后一个客户放弃了所有权后对象才会被删除,对象可能比预期存在更长时间。往往这是一个错误点。Nebula3将提示你有关任何的引用计数泄露。

原文:<<The Nebula Device 3 Document>>RefCounting And Smart Pointers

[声明]:限于译者水平,文中难免错漏之处,欢迎各位网友批评指正;

没有评论:

发表评论