Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
eliminação do ponteiro para o tipo incompleto «tipo»; nenhum destrutor foi chamado
Observações
O delete operador é chamado para excluir um tipo que foi declarado, mas não definido. O compilador não consegue encontrar o destrutor para chamar porque a definição não está na mesma unidade de tradução que o delete.
Example
O exemplo a seguir gera C4150 declarando, mas não definindo class IncClass:
// compile with: /W2
class IncClass;
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass; // C4150
}
Para corrigir o problema, coloque a definição de IncClass no mesmo ficheiro que o delete. Se a classe for declarada em um arquivo de cabeçalho, ela poderá ser adicionada ao arquivo usando #include. Se a classe não for declarada em um arquivo de cabeçalho, a NoDestruct definição de função pode precisar ser movida para o mesmo arquivo que a IncClass definição.
// compile with: /W2
#include "IncClass.h"
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass;
}
C4150 será emitido quando a classe for definida após a chamada do destruidor no mesmo arquivo. No exemplo IncClass a seguir é declarado antes de ser usado, mas definido após o delete:
// C4150.cpp
// compile with: /W2
class IncClass;
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass; // C4150
}
class IncClass
{
public:
IncClass() = default;
~IncClass() = default;
};
Neste cenário, o uso de delete precisa acontecer após a definição da classe.
// C4150.cpp
// compile with: /W2
class IncClass;
void NoDestruct( IncClass* pIncClass );
class IncClass
{
public:
IncClass() = default;
~IncClass() = default;
};
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass;
}