智能指针实现

时间:2014-03-23 01:34:38

标签: c++ smart-pointers

我不会编写所有代码,但我正在查看智能指针示例实现,它具有:

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;
};
  1. API中第一个公共函数的用途是什么?
  2. 为什么我们需要对其他两种API方法进行常量重载?
  3. 不仅是const-overload,还有为什么有return-const-object变体?

2 个答案:

答案 0 :(得分:1)

转化运营商看起来打算做两件事:

  1. 将智能指针转换为void*。通常指针转换为void*,但我不确定为智能指针做一个好主意。
  2. 在测试对象时,将使用它来查看在布尔上下文中计算时它们具有的值。这可用于确定指针是否为空指针。
  3. 就个人而言,我可能只支持第二个用例,而是使用显式转换为bool

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

    const的重载显然是为了将智能指针的常量传播到指向的对象。

答案 1 :(得分:1)

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个对象,所以无法更改此对象。