我不会编写所有代码,但我正在查看智能指针示例实现,它具有:
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;
};
答案 0 :(得分:1)
转化运营商看起来打算做两件事:
void*
。通常指针转换为void*
,但我不确定为智能指针做一个好主意。就个人而言,我可能只支持第二个用例,而是使用显式转换为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
个对象,所以无法更改此对象。