パラメーターを持っていない非静的メンバー関数を使用して、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 クラスは、自動オブジェクト削除をインプリメントします。
関連参照