используя умные указатели с этим

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


person Emiliano    schedule 30.07.2010    source источник


Ответы (2)


Вы можете посмотреть enable_shared_from_this, который там для конкретно решения задач, подобных вашей.

person hkaiser    schedule 30.07.2010

Вы должны наследовать свои классы от boost::enable_shared_from_this<>. Ознакомьтесь с примером Boost здесь.

person Gianni    schedule 30.07.2010