Реализация сематики указателя (прокси класс)
class MyObject
{
public:
void foo() {}
};
class MyObjectPtr // Так называемый PROXY класс
{
MyObject* ptr_;
public:
MyObjectPtr()
: ptr_(new MyObject())
{
}
~MyObjectPtr()
{
delete ptr_;
}
MyObject* operator->()
{
return ptr_;
}
};
MyObjectPtr p;
p->foo();
Здесь оператор -> возвращает указатель на MyObject и после вызываем функцию foo(). Однако, мне кажется было бы логичнее, если бы вызов функции выглядел вот так:
(p->)->foo();
Разве нет? Сначала мы получаем указатель, а после происходит обращение через указатель к функции класса.
Или я чего-то не понимаю.