智能指针的实现

Smart pointer implementation

本文关键字:实现 指针 智能      更新时间:2023-10-16

我不会写所有的代码,但我正在看一个智能指针的例子实现,它有:

template<typename T>
class smart_ptr
{
public:
    operator void*() const {return mPtr;}
    const T& operator*() const;
    T& operator*();
    const T* operator->() const;
    T* operator->();
private:
    T* mPtr;
};
    API中第一个公共函数的目的是什么?为什么我们需要const-overload其他两个API方法?不仅是const-overload,为什么还有return-const-object变量?

operator void*函数是一个类型强制转换函数,所以你可以这样写:

smart_ptr foo;
void* ptr = foo;  // The compiler will call `operator void*` here

或者

if( foo) {  // `operator void*` called to test boolean expression
  //...
}

功能
const T& operator*() const;
const T* operator->() const;

const,因此可以在const smart_ptr上调用它们。因为他们把pointer/reference返回给const对象,所以这个对象不能改变。

转换操作符看起来要做两件事:

  1. 将智能指针转换为void*。一般指针转换为void*,但我不确定这是否是一个好主意做智能指针。
  2. 它将在测试对象时使用,以查看它们在布尔上下文中计算时的值。可用于确定指针是否为空指针。

就我个人而言,我可能只支持第二种用例,并使用显式转换为bool:

explicit operator bool() const { return this->mPtr; }

const的重载显然是为了将智能指针的constness传播给所指向的对象。