2012-04-20 3 views
0

Например, я использую шаблон команды и добавляю команды в очередь. Записи в очереди - это CommandItems, который похож на простую структуру, которая содержит объект команды и время выполнения команды.C++: Можно ли дважды добавить один и тот же объект в коллекцию?

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

std::priority_queue<CommandItem> commandQueue_; 

Если я хочу, чтобы выполнить ту же команду дважды в разное время, так что было бы два CommandItems для команды в очереди, мне нужно построить два отдельных объекта команды? Или я могу просто поместить один и тот же командный объект дважды? За и против?

(Примечание с помощью shared_ptr командовать объекты. Очередь должна занимать командные объекты различных подклассов)

ответ

3

Это вид всей точки shared_ptr, вы можете иметь несколько указателей на тот же объект, и объект будет автоматически удаляться, когда этого больше никто не нуждается.

Поскольку ваш класс Command имеет подклассы, убедитесь, что он имеет виртуальный деструктор.

+0

Имеет смысл, я думаю, просто странно повторять использование такого объекта, я привык создавать новые объекты для каждого нового использования. Мне интересно, если позже, если я изменю классы Command (не уверен, разумно ли ожидать, что они когда-либо будут иметь состояние), вернется ли это, чтобы укусить меня. – User

1

Это зависит от вашей реализации, но обычно я предлагаю создавать отдельные объекты для отдельных экземпляров действия (даже если это одно и то же действие).

С его указателем он был бы отдельным экземпляром в коллекции (хотя некоторые коллекции допускают несколько экземпляров одного и того же элемента).

 Смежные вопросы

  • Нет связанных вопросов^_^