2012-06-26 8 views

Respuesta

8

Las funciones llamadas 'scalar deleting destructor' y 'vector deleting destructor' son funciones auxiliares creadas por el compilador de VC al generar código para la instrucción delete. No los confunda con el destructor de clase que también puede ser generado por el compilador. El primero puede ser expresado en pseudocódigo como

void scalar_deleting_destructor(A* pa) 
{ 
pa->~A(); 
A::operator delete(pa); 
} 

y el segundo como

void vector_deleting_destructor(A* pa, size_t count) 
{ 
for (size_t i = 0; i < count; ++i) 
pa[i].~A(); 
A::operator delete[](pa); 
} 
+1

Gracias, Andrey. Estoy un poco confundido acerca del operador de eliminación interna aquí. Este destructor de eliminación escalar es un compilador generado y se llama por 'delete a', ¿es así? Parece que la llamada interna para eliminar causa recursividad? – Thomson

+3

@Thomson Permítanme intentar dejarlo más claro. 'delete a' es una * declaración de borrado *, es decir, una construcción de lenguaje, que no debe confundirse con' A :: operator delete' que es un * delete operator *, una función que desasigna la memoria. No tengo el estándar de C++ a mano en este momento, podría proporcionar referencias un poco más tarde. – Andrey

Cuestiones relacionadas