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割り当て時に所有権を譲渡しないようなものもあります。

ポイント 2. これらのメソッドは、スマート ポインターでの通常のポインター操作をシミュレートします。

于 2012-08-10T21:44:44.870 に答える
0

答えるには2.

生のポインターをシミュレートします。を使用*ptrして、それが指すオブジェクトを返すことができ (C ポインターのように)、 を使用して , (C ポインターのように) メソッドをptr->foo()呼び出すことができます。fooT

于 2012-08-10T21:42:25.313 に答える
0
  1. 私が考えることができるスマート ポインター セマンティクスには、その署名で機能する 2 つのタイプがあります。1 つ目は、std::shared_ptr のような参照カウント ポインターです。もう 1 つは値のセマンティクスです。つまり、ポインターをコピーすると、指定されたオブジェクトの新しいコピーが作成されます。この署名は、auto_ptr/unique_ptr のようなポインターでは機能しません。
于 2012-08-10T23:57:01.353 に答える