Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: EmilianoОтветов: 2

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

c++boostboost-smart-ptr

Ответы

Ответ 1 · рейтинг 12 · hkaiser

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

Ответ 2 · рейтинг 6 · Gianni

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы