Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
suppression de pointeur vers type incomplet « type » ; aucun destructeur appelé
Remarques
L’opérateur delete est appelé pour supprimer un type déclaré mais non défini. Le compilateur ne trouve pas le destructeur à appeler, car la définition ne se trouve pas dans la même unité de traduction que le delete.
Exemple
L’exemple suivant génère l’erreur C4150 en déclarant, mais en ne définissant class IncClasspas :
// compile with: /W2
class IncClass;
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass; // C4150
}
Pour résoudre le problème, placez la définition du IncClass même fichier que le fichier delete. Si la classe est déclarée dans un fichier d’en-tête, elle peut être ajoutée au fichier à l’aide de #include. Si la classe n’est pas déclarée dans un fichier d’en-tête, la définition NoDestruct de la fonction peut avoir besoin d’être déplacée dans le même fichier que la définition IncClass.
// compile with: /W2
#include "IncClass.h"
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass;
}
C4150 est émis lorsque la classe est définie après l’appel du destructeur dans le même fichier. Dans l’exemple suivant IncClass, il est déclaré avant d’être utilisé, mais défini après delete :
// C4150.cpp
// compile with: /W2
class IncClass;
void NoDestruct( IncClass* pIncClass )
{
delete pIncClass; // C4150
}
class IncClass
{
public:
IncClass() = default;
~IncClass() = default;
};
Dans ce scénario, l’utilisation de delete doit être après la définition de 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;
}