私はブーストスマートポインターの使用法を学んでいますが、いくつかの状況について少し混乱しています。各状態が単一の更新メソッドによって実装されるステートマシンを実装しているとしましょう。各状態は、それ自体を返すか、新しい状態オブジェクトを作成できます。
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);」のようなものを返すのは無意味だと思います。安全ではないからです。私は何をすべきか?