4

我正在学习使用 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();

你能把这段代码翻译成使用 boost 智能指针吗?当谈到“返回这个”部分时,我有点困惑,因为我不知道该怎么做。基本上我认为返回“return boost::shared_ptr(this);”之类的东西是没有用的 因为它不安全。我应该怎么办?

4

2 回答 2

12

您可能想查看enable_shared_from_this,它专门用于解决与您类似的问题。

于 2010-07-30T18:47:05.530 回答
6

你必须让你的类继承自boost::enable_shared_from_this<>. 在此处查看 Boost 的示例。

于 2010-07-30T18:48:46.043 回答