Я читаю Учебник по С++, 3-е изд. (Липпман и Лажуа), и в нем говорится, что когда вектор необходимо перераспределить, чтобы освободить место для дополнительных элементов, добавленных с помощью push_back()
, элементы копируются в новое пространство, а затем деструктор вызывается для старых элементов. Я не понимаю, зачем это нужно - почему нельзя просто копировать данные побитно? Я предполагаю, что ответ связан с динамическим распределением памяти, но моя текущая цепочка рассуждений заключается в том, что даже если векторные элементы обрабатывают динамическую память, данные, фактически хранящиеся в элементах, будут указателями, а это означает, что побитовое копирование сохранит место, на которое они указывают. к и не будет представлять никаких проблем. Я вижу, как перераспределение динамически выделенной памяти, на которую указывают элементы, может быть проблемой, поскольку это приведет к аннулированию указателей, но, насколько я могу судить, у векторного перераспределения нет причин для этого.
Может ли кто-нибудь дать мне простой пример класса, который не следует перемещать по крупицам?