例如,我正在使用命令模式并将命令添加到队列中。队列中的条目是CommandItems,它就像一个简单的结构,它包含命令对象和执行命令的时间。
struct CommandItem
{
time_t theTime;
std::shared_ptr<Command> command;
...
// comparison operator implemented
}
std::priority_queue<CommandItem> commandQueue_;
如果我想在不同的时间执行两次相同的命令,这样队列中的命令会有两个CommandItem,我是否需要构造两个单独的命令对象?或者我可以将相同的命令对象放入两次?优点/缺点?
(注意使用shared_ptr命令对象。队列需要保存各种子类的命令对象)
答案 0 :(得分:3)
这就是shared_ptr
的重点,你可以有多个指向同一个对象的指针,当没有人需要它时,对象会被自动删除。
由于您的Command类具有子类,因此请确保它具有虚拟析构函数。
答案 1 :(得分:1)
这取决于您的实现,但通常我建议为不同的操作实例创建单独的对象(即使它的操作相同)。
由于它是一个指针,它将成为集合中的一个独特实例(即使某些集合允许同一项的多个实例)。