Partager via


Avertissement du compilateur (niveau 1) C4382

lève 'type' : un type avec __clrcall destructeur ou constructeur de copie ne peut être intercepté que dans /clr :pure module

Notes

L’option /clr :pure compiler est déconseillée dans Visual Studio 2015 et non prise en charge dans Visual Studio 2017.

Lorsqu’elle est compilée avec /clr (pas /clr :pure), la gestion des exceptions s’attend à ce que les fonctions membres d’un type natif soient __cdecl et non __clrcall. Les types natifs avec des fonctions membres utilisant __clrcall la convention d’appel ne peuvent pas être interceptés dans un module compilé avec /clr.

Si l’exception est interceptée dans un module compilé avec /clr :pure, vous pouvez ignorer cet avertissement.

Pour plus d’informations, consultez l’article /clr (Compilation pour le Common Language Runtime).

Exemple

L’exemple suivant génère l’erreur C4382.

// C4382.cpp
// compile with: /clr /W1 /c
struct S {
   __clrcall ~S() {}
};

struct T {
   ~T() {}
};

int main() {
   S s;
   throw s;   // C4382

   S * ps = &s;
   throw ps;   // OK

   T t;
   throw t;   // OK
}