0

例如,我正在使用命令模式并将命令添加到队列中。队列中的条目是 CommandItems,它就像一个简单的结构,包含命令对象和执行命令的时间。

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

std::priority_queue<CommandItem> commandQueue_;

如果我想在不同的时间两次执行相同的命令,这样队列中的命令会有两个 CommandItems,我是否需要构造两个单独的命令对象?或者我可以将相同的命令对象放入两次吗?优点缺点?

(注意使用shared_ptr命令对象,队列需要保存各种子类的命令对象)

4

2 回答 2

3

这就是 a 的全部意义shared_ptr,你可以有多个指向同一个对象的指针,当没有人需要它时,该对象将被自动删除。

由于您的 Command 类具有子类,因此请确保它具有虚拟析构函数。

于 2012-04-20T21:38:01.297 回答
1

这取决于您的实现,但通常我建议为单独的操作实例创建单独的对象(即使它是相同的操作)。

由于它是一个指针,因此它将是集合中的一个不同实例(即使某些集合允许同一项目的多个实例)。

于 2012-04-20T21:38:44.227 回答