Я изучаю использование умных указателей наддува, но я немного запутался в нескольких ситуациях.Допустим, я реализую конечный автомат, где каждое состояние реализуется одним методом обновления.Каждое состояние может возвращать себя или создавать новый объект состояния:
struct state
{
virtual state* update() = 0; // The point: I want to return a smart pointer here
};
struct stateA : public state
{
virtual state* update() { return this; }
};
struct stateB : public state
{
virtual state* update() { if(some condition) return new stateA() else return this; }
};
Цикл конечного автомата будет выглядеть следующим образом:
while(true)
current_state = current_state->update();
Не могли бы вы перевестиэтот код использовать для повышения умных указателей?Я немного растерялся, когда дело доходит до части «верни это», потому что я не знаю, что делать.По сути, я думаю, что бесполезно возвращать что-то вроде «return boost :: shared_ptr (this);»потому что это не безопасно.Что мне делать?