Вопрос по перегрузке оператора в ООП С++

Есть такой код

class CustomFoo {
 
   virtual void do_stuff()=0;
};

class Foo: CustomFoo {
   
    void do_staff() {....} final;
};


class FooWrapper {

  vector<CustomFoo*> foos;
  
  CustomFoo* operator->() {return foo[0];}
};


void main(){

  FooWrapper wrapper;
  wrapper.foos.push_back(new Foo());
  wrapper->do_staff();
}

Код компилируется но не работает Завершается ошибкой (SIGSEGV), code 1 (SEGV_MAPERR) Как это можно заставить работать, т.е. при использовании оператора -> вызывать соответствующую функцию из Foo. Спасибо.


Ответы (1 шт):

Автор решения: Harry

Если довести ваш код до компилируемого состояния, то все работает:

class CustomFoo {
public:
    virtual void do_staff()=0;
};

class Foo: public CustomFoo {
public:
    void do_staff() override { cout << "do_staff()\n"; };
};


class FooWrapper {
public:
    vector<CustomFoo*> foos;
    CustomFoo* operator->() {return foos[0];}
};


int main(){

    FooWrapper wrapper;
    wrapper.foos.push_back(new Foo());
    wrapper->do_staff();
}
→ Ссылка