智能指针的实现
Smart pointer implementation
我不会写所有的代码,但我正在看一个智能指针的例子实现,它有:
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
对象,所以这个对象不能改变。
转换操作符看起来要做两件事:
- 将智能指针转换为
void*
。一般指针转换为void*
,但我不确定这是否是一个好主意做智能指针。 - 它将在测试对象时使用,以查看它们在布尔上下文中计算时的值。可用于确定指针是否为空指针。
就我个人而言,我可能只支持第二种用例,并使用显式转换为bool
:
explicit operator bool() const { return this->mPtr; }
const
的重载显然是为了将智能指针的constness传播给所指向的对象。
相关文章:
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- Qt中的实现指针(PIMPL)
- 如何实现容纳整数和无效指针的双向链表?
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 使用共享指针实现复制 c'tor?
- 使用指针在分区函数中实现随机分区点
- 涉及指针和手动实现的矩阵类的问题
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- 未分配被释放的指针(将堆栈实现为链表时)
- 如何正确实现具有原始指针的类的复制构造函数?
- 如何在C++中重新实现包含指针的 STL 容器的类的迭代器
- 我们可以在不使用head指针的情况下通过使用head的简单变量而不是head的指针来实现链表吗
- 如何在CRTP实现中传递基类指针
- 如何在 c++ 中实现指针的类型
- 实现指针队列
- 实现指针元组的深度复制
- 如何实现指针的<<和>>?
- 如何在结构体内部实现指针
- 实现指针转换操作符