Я изучаю использование интеллектуальных указателей boost, но я немного запутался в нескольких ситуациях. Допустим, я реализую конечный автомат, в котором каждое состояние реализуется одним методом обновления. Каждое состояние может вернуть себя или создать новый объект состояния:
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);» потому что это не безопасно. Что я должен делать?