クラス・メンバー・アクセスの多重定義

C++パラメーターを持っていない非静的メンバー関数を使用して、operator-> を多重定義します。 次の例は、コンパイラーがどのように、 多重定義されたクラス・メンバー・アクセス演算子を解釈するかを示しています。

struct Y {
  void f() { };
};
 
struct X {
 Y* ptr;
 Y* operator->() {
   return ptr;
 };
};
 
int main() {
  X x;
  x->f();
}

ステートメント x->f() は、(x.operator->())->f() と解釈されます。

operator-> は、「スマート・ポインター」をインプリメントするために使用されます (しばしばポインター間接参照演算子と組にして)。 これらのポインターは、普通のポインターのように動作するオブジェクトですが、 次の点で異なります。すなわち、それらのポインターによってユーザーがオブジェクトにアクセスするときに、 自動オブジェクト削除 (ポインターが破棄されるとき、 または別のオブジェクトを指すためにポインターが使用されるとき)、 あるいは参照カウント (同じオブジェクトを指すスマート・ポインターの数をカウントし、そして、 そのカウントがゼロになったときに、オブジェクトを自動的に削除する) などの別の作業を実行します。

auto_ptr と呼ばれるスマート・ポインターの 1 つの例が、C++ 標準ライブラリーに含まれています。 <memory> ヘッダーの中に、それを見出すことができます。 auto_ptr クラスは、自動オブジェクト削除をインプリメントします。

関連参照

IBM Copyright 2003