¿Cómo es posible que se permita eliminar objetos con destructor privado en el siguiente código? Reduje el programa real a la siguiente muestra, pero aún compila y funciona.Eliminación de objetos con destructor privado
class SomeClass;
int main(int argc, char *argv[])
{
SomeClass* boo = 0; // in real program it will be valid pointer
delete boo; // how it can work?
return -1;
}
class SomeClass
{
private:
~SomeClass() {}; // ! private destructor !
};
Interesting..if muevo la definición de la clase anterior main() entonces se lanza un error de compilación. De lo contrario, acabo de recibir una 'advertencia C4150: eliminación del puntero al tipo incompleto 'SomeClass'; no hay destructor llamado' – Naveen
@Naveen: Eso es lo esperado. El tipo incompleto es un problema. El destructor privado es otro. Cada uno tiene su propio mensaje de diagnóstico. Cambia entre los dos moviendo la definición de 'SomeClass'. – AnT