Estaba buscando a través del código std :: vector y encontré algo que no acababa de obtener. Cuando la capacidad < size() + 1 necesita reasignar el buffer para que pueda insertar el nuevo elemento. Lo que hace (por lo que he sido capaz de extraer del código) es:std :: vector insert() reasignación
- asignar la nueva memoria intermedia
- copiar el prefijo de la antigua memoria intermedia (0 - índice de inserción)
- construir el nuevo elemento en el nuevo buffer
- copiar el sufijo de la antigua memoria intermedia (índice - final)
- llamada al destructor en todos los artículos en tampón de edad
- búfer de edad deallocate
La copia de prefijo y sufijo se realiza con memmove por lo que pude ver. ¿No es Memmove una copia pura de los datos? No llama al constructor de los elementos, ¿verdad? Lo que me preguntaba es, ¿por qué la función llama al destructor en los elementos en el viejo buffer si la memoria simplemente se mueve, no se reconstruye en el nuevo buffer?
Creo que su comprensión del código es incorrecta. Si cree que se está utilizando memmove, publique un fragmento que ilustre esto. –
El uso de memmove es una posible optimización del compilador. Pero su nosotros solo es válido para los tipos de POD. Si el tipo tiene un constructor/destructor, deben ser utilizados. –