C++ でアロー演算子をオーバーロードした時の注意
以下の例だとオーバーロードしたアロー演算子は呼び出されません。
#include <iostream> struct X{ X* operator ->(){ std::cout << "operator ->" << std::endl; return this; } void func(){ std::cout << "func" << std::endl; } }; int main(){ X* x = nullptr; x->func(); return 0; } /* output: func */
これは、x
が単なるポインタ型なので X
の定義の影響を受けないからです。
正しくオーバーロードしたアロー演算子を呼び出したい場合は、
(*x)->func();
という風にする必要があります。