- Должен ли я удалить свою tempMsg?
Да, как написано, вы должны либо delete
ваш tempMsg
, либо повторно использовать один экземпляр дляжизнь программы (без внесения new
единиц после первой).Повторное использование может потребовать очистки перед каждым повторным использованием, что вряд ли стоит.
Копируется ли он в deque или, в конце концов, данные, указанные tempMsg, будут теми, к которым позднее будет получен доступ из deque?
Скопировано;push_back
получает ссылки, но документируется только для копирования или перемещения (и так как вы передали l-значение, оно будет копироваться).Вы можете сэкономить небольшую работу, выполнив cMS.push_front(std::move(*tempMsg));
, чтобы очистить tempMsg
(поскольку вы просто собираетесь удалить ее после, так что вы также можете сохранить копии).
Или я должен создать конструктор копирования и оператор присвоения копии?
Предполагая, что все члены вашего cSerialMessage
правильно копируются (нет необработанных указателей или тому подобного)), и вы не определили никаких пользовательских операций копирования / перемещения или деструкторов, все должно быть в порядке;сгенерированный компилятором конструктор копирования будет работать нормально.cMsgManager
с другой стороны, потребуется полное правило 3/5 конструкторов и деструкторов, потому что вы не использовали умный указатель или семантику значения для tempMsg
.
Обратите внимание, что все это динамическое распределениебессмысленно / расточительно.Вы можете просто сделать tempMsg
a cSerialMessage
(не cSerialMessage*
) и работать с ним по значению.Вы можете оставить его атрибутом экземпляра или просто NewMessage
вернуть фактическое новое сообщение, а не хранить копию локально.Локальная копия превратит многопоточность или повторный ввод кода в кошмар, поэтому возвращение нового сообщения по значению и управление вызывающей стороной , вероятно, является лучшей идеей.