2012-04-20 7 views
0

たとえば、私はコマンドパターンを使用しており、キューにコマンドを追加しています。キュー内のエントリは、コマンドオブジェクトを保持する単純な構造体のようなCommandItemsと、コマンドを実行する時間です。C++:同じオブジェクトをコレクションに2回入れることはできますか?

struct CommandItem 
{ 
    time_t theTime; 
    std::shared_ptr<Command> command; 
    ... 
    // comparison operator implemented 
} 

std::priority_queue<CommandItem> commandQueue_; 

私はキューにコマンド用の2つのCommandItemsがあるだろうというように、異なる時間に二回同じコマンドを実行したい場合は、私は2つの別々のコマンドオブジェクトを作成する必要がありますか?あるいは、同じコマンドオブジェクトを2度入れてもいいですか?長所短所?

(注オブジェクトを指令するのshared_ptrを使用。キューは、様々なサブクラスのコマンドオブジェクトを保持する必要がある)

答えて

3

shared_ptrの全体のポイントのようなものだ、あなたが同じオブジェクトとオブジェクトへの複数のポインタを持つことができます誰もそれを必要としなくなったら自動的に削除されます。

Commandクラスにはサブクラスがあるため、仮想デストラクタがあることを確認してください。

+0

このようなオブジェクトを再利用するのは変だと思いますが、私は新しい使用のたびに新しいオブジェクトを作成することに慣れています。後でCommandクラスを修正すれば、これが私に噛み付くかどうか、これが状態を持つことを期待するのが妥当かどうかはわかりません。 – User

1

これは実装にもよりますが、一般的には別々のアクションのインスタンスに対して別々のオブジェクトを作成することをお勧めします(同じアクションであっても)。

ポインタであるため、コレクション内の別個のインスタンスになります(一部のコレクションで同じアイテムの複数のインスタンスが許可されている場合でも)。

関連する問題