Éste me hizo pensar:Eliminar objetos de tipo incompleto
class X;
void foo(X* p)
{
delete p;
}
¿Cómo podemos delete p
si no incluso saber si tiene X
destructor visible? g ++ 4.5.1 da tres advertencias:
warning: possible problem detected in invocation of delete operator: warning: 'p' has incomplete type warning: forward declaration of 'struct X'
Y luego dice:
nota: ni el destructor ni el operador específico de clase eliminar serán llamados, incluso si se declaran cuando se define la clase.
Wow ... ¿se necesitan compiladores para diagnosticar esta situación como lo hace g ++? ¿O es un comportamiento indefinido?
¡gracioso, encontré esto ayer! – UncleZeiv
Solo para obtener información: Visual C++ 9.0 muestra dicha advertencia también ... – cybevnm
posible duplicado de [¿Por qué, realmente, borrar un tipo incompleto es un comportamiento indefinido?] (Http://stackoverflow.com/questions/2517245/why-really- deleting-an-incomplete-type-is-undefined-behavior) – fredoverflow