Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais
Nous recommandons d’utiliser Visual Studio 2017

Erreur du compilateur C3841

expression de suppression non conforme : le type managé 'type' n'a pas de destructeur défini

Lorsque vous compilez avec /clr:oldSyntax, la suppression d'un pointeur implémente seulement la finalisation. Par conséquent, si aucun destructeur n'est défini pour la classe (ce qui implique qu'il n'existe pas de méthode Finalize), c'est une erreur de supprimer un pointeur vers le type.

L'erreur C3841 n'est accessible qu'à l'aide de /clr:oldSyntax.

L'exemple suivant génère l'erreur C3841 :

// C3841.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
__gc class A
{   // implicitly derived from System::Object
public:
   ~A() {};
};

int main()
{
   System::Object* p = new A;
   delete p;   // C3841 since System::Object has no destructor defined
   A* q = static_cast<A*>(p);
   delete q;   // OK since A has a destructor
}
Afficher: