c ++:我可以将同一个对象放入集合中两次吗?

时间:2012-04-20 21:34:07

标签: c++ collections dynamic-memory-allocation

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

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

std::priority_queue<CommandItem> commandQueue_;

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

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

2 个答案:

答案 0 :(得分:3)

这就是shared_ptr的重点,你可以有多个指向同一个对象的指针,当没有人需要它时,对象会被自动删除。

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

答案 1 :(得分:1)

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

由于它是一个指针,它将成为集合中的一个独特实例(即使某些集合允许同一项的多个实例)。