本文将从WebKit源码中解析WebKit智能指针的用法。进入正题之前,先还是要仔细看看官方文档:http://www.webkit.org/coding/RefPtr.html。不管能否看明白还是要先看看这篇文章,毕竟这是本文最主要的参考文档。
文档里已提到2005之前,WebKit基于RefCounted来管理对象的销毁。
RefCounted
RefCounted原理很简单,就是最经典的引用计数的方式。它的源码也很简单,看看它最重要的两个方法,ref和deref:
void ref()
{
#if CHECK_REF_COUNTED_LIFECYCLE
ASSERT(m_verifier.isSafeToUse());
ASSERT(!m_deletionHasBegun);
ASSERT(!m_adoptionIsRequired);
#endif
++m_refCount;
}
void deref()
{
if (derefBase())
delete static_cast<T*>(this);
}
// Returns whether the pointer should be freed or not.
bool derefBase()
{
#if CHECK_REF_COUNTED_LIFECYCLE
ASSERT(m_verifier.isSafeToUse());
ASSERT(!m_deletionHasBegun);
ASSERT(!m_adoptionIsRequired);
#endif
ASSERT(m_refCount > 0);
if (m_refCount == 1) {

本文深入解析WebKit源码中的智能指针,包括RefCounted的基本原理,RefPtr和PassRefPtr的自动化引用计数,以及OwnPtr和PassOwnPtr在不依赖引用计数的场景下的应用。这些智能指针用于对象的生命周期管理,简化了C++的内存控制。
最低0.47元/天 解锁文章
2685

被折叠的 条评论
为什么被折叠?



