Нет. Когда вы уничтожаете std::vector
, он уничтожает все его элементы (вызывает их деструктор), а затем освобождает хранилище, используемое объектами. Но (необработанный) указатель не имеет деструктора - уничтожение делает , а не освобождение объекта, на который он указывает - он просто уничтожает хранилище, используемое для хранения самого указателя.
Если бы у вас было vector
умных указателей (std::unique_ptr
или std::shared_ptr
), то это было бы другое дело. Эти классы do имеют деструкторы и do освобождают то, на что они указывают после уничтожения (unique_ptr
всегда, shared_ptr
, если это последний объект, указывающий на содержащийся объект, в противном случае он просто уменьшает значение его счетчик ссылок).
Примечание: std::unique_ptr
- это очень тонкая оболочка вокруг необработанного указателя, предназначенная для полной оптимизации. Таким образом, его использование должно иметь нулевые издержки по сравнению с необработанным указателем, когда оптимизация включена. Таким образом, вы получите желаемую семантику с без издержек по сравнению с ручным управлением памятью - вручную.