上一篇講了 RefCounted,也講一下我看 RefPtr, PassRefPtr, OwnPtr, 及 PassOwnPtr 的心得:
- RefPtr 定義了一個轉換至 pointer to data member 的 conversion operator:
// This conversion operator allows implicit conversion to bool but not to other integer types.
typedef T* (RefPtr::*UnspecifiedBoolType);
operator UnspecifiedBoolType() const { return m_ptr ? &RefPtr::m_ptr : 0; }
這個轉換運算子回傳的值可以被 compiler 自動轉換成 bool (非空時為 true),但不能被轉換成數值來被使用,主要是用來避免一些可能的誤用狀況,有興趣的人可以參考 “The Safe Bool Idiom” 這篇文章。
- OwnPtr 運用了 type traits 的技巧來達到 OwnPtr
及 OwnPtr<T*> 都是宣告一個內含 T* 的 smart pointer:
typedef typename RemovePointer<T>::Type ValueType;
typedef ValueType* PtrType;