Да, std::vector < MyObject*> MyObjects
содержит указатели на объекты. Вектор предполагает, что ему не принадлежат объекты, поэтому он не удаляет их по умолчанию.
Если вы хотите, чтобы объекты уничтожались автоматически, либо измените тип:
std::vector <std::unique_ptr<MyObject>> MyObjects
Или, удалите все указатели в:
- деструкторе
- операторе присваивания
- в конструкторах, в случае исключения. Если есть исключение, то без обработки часть вектора будет заполнена объектами. За исключением случаев, указатели не удаляются, если они не обрабатываются явным образом.
Использование std::unique_ptr
обычно является предпочтительным решением, так как оно гарантирует, что память будет освобождена. Но это происходит за счет отсутствия конструктора присваивания / копирования по умолчанию. Вы либо живете без присваивания / копирования, остаетесь только с семантикой перемещения, либо должны явно определять присваивание / копирование. Но это небольшая цена, поскольку с простыми указателями вам все равно придется определять присваивание / копирование.