0

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

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& operator=(const SmartPtr& other)”:为什么参数是常数?分配完成后它不会失去所有权吗?
  2. 为什么我们需要“T& operator*() const”和“T* operator->() const”方法?

谢谢@

4

3 回答 3

2

Point 1. 不一定,取决于智能指针的设计。有些人喜欢boost:shared_ptr不转让所有权。

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

于 2012-08-10T21:44:44.870 回答
0

回答2.

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

于 2012-08-10T21:42:25.313 回答
0
  1. 我可以想到两种类型的智能指针语义可以与该签名一起使用。第一个是引用计数指针,如 std::shared_ptr。另一种是值语义,即复制指针会生成指向对象的新副本。此签名不适用于 auto_ptr/unique_ptr 之类的指针。
于 2012-08-10T23:57:01.353 回答