4

私はブーストスマートポインターの使用法を学んでいますが、いくつかの状況について少し混乱しています。各状態が単一の更新メソッドによって実装されるステートマシンを実装しているとしましょう。各状態は、それ自体を返すか、新しい状態オブジェクトを作成できます。

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);」のようなものを返すのは無意味だと思います。安全ではないからです。私は何をすべきか?

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 に答える