C ++:实现智能指针

时间:2012-08-10 21:39:48

标签: c++ smart-pointers

我正在阅读实现智能指针,我发现了以下代码,

template <class T>
class SmartPtr
{
public:
explicit SmartPtr(T* pointee) : pointee_(pointee);
SmartPtr& operator=(const SmartPtr& other);
~SmartPtr();
T& operator*() const
{
...
return *pointee_;
}
T* operator->() const
{
...
return pointee_;
}
private:
T* pointee_;
...
};

我无法理解以下内容,

  1. “SmartPtr&amp; operator =(const SmartPtr&amp; other)”:为什么参数是常量?在完成任务后,它是否会失去所有权?
  2. 为什么我们需要“T&amp; operator *()const”和“T * operator-&gt;()const”方法?
  3. THX @

3 个答案:

答案 0 :(得分:2)

要点1.不一定,取决于智能指针的设计。有些像boost:shared_ptr这样的人不会转让所有权。

点2.这些方法模拟智能指针上的正常指针操作。

答案 1 :(得分:0)

回答2.

模拟原始指针。您可以使用*ptr返回它指向的对象(就像C指针一样),并且可以使用ptr->foo()来调用foo中的方法T,(就像一个C指针)。

答案 2 :(得分:0)

  1. 我可以想到有两种类型的智能指针语义可以使用该签名。第一个是引用计数指针,如std :: shared_ptr。另一种是值语义,即复制指针使得指向对象的新副本。此签名不适用于auto_ptr / unique_ptr等指针。