Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
eliminación de puntero a tipo "type" incompleto; no se llamó a ningún destructor
Observaciones
Se llama al operador delete para eliminar un tipo declarado pero no definido. El compilador no encuentra el destructor al que llamar porque la definición no está en la misma unidad de traducción que la delete.
Ejemplo
En el ejemplo siguiente se genera el error C4150 declarando pero no definiendo class IncClass.
// compile with: /W2
class IncClass;
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass; // C4150
}
Para corregir el incidencia, coloque la definición de IncClass en el mismo archivo que el delete. Si la clase se declara en un archivo de encabezado, se puede agregar al archivo mediante #include. Si la clase no se declara en un archivo de encabezado, es posible que la definición de función NoDestruct deba moverse al mismo archivo que la definición de IncClass.
// compile with: /W2
#include "IncClass.h"
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass;
}
C4150 se emitirá cuando se defina la clase después de la llamada del destructor en el mismo archivo. En el ejemplo siguiente IncClass se declara antes de usarse, pero se define después del delete:
// C4150.cpp
// compile with: /W2
class IncClass;
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass; // C4150
}
class IncClass
{
public:
IncClass() = default;
~IncClass() = default;
};
En este escenario, el uso de delete debe ser después de la definición de clase.
// C4150.cpp
// compile with: /W2
class IncClass;
void NoDestruct( IncClass* pIncClass );
class IncClass
{
public:
IncClass() = default;
~IncClass() = default;
};
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass;
}