我正在学习使用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);”这样的东西是没用的。因为它不安全 我该怎么办?
答案 0 :(得分:12)
您可能需要查看enable_shared_from_this
,这是专门解决与您类似的问题。
答案 1 :(得分:6)
您必须让您的课程继承自boost::enable_shared_from_this<>
。查看Boost的示例here。