Udostępnij za pomocą


Ostrzeżenie kompilatora (poziom 1) C4382

throwing "type": typ z __clrcall destruktorem lub konstruktorem kopiowania można przechwycić tylko w /clr:pure module

Uwagi

Opcja /clr:pure compiler jest przestarzała w programie Visual Studio 2015 i nieobsługiwana w programie Visual Studio 2017.

Podczas kompilowania z /clr (nie /clr:pure), obsługa wyjątków oczekuje, że funkcje składowe w typie natywnym będą __cdecl, a nie __clrcall. Typy natywne z funkcjami składowymi przy użyciu konwencji wywoływania nie mogą być przechwytywane w module skompilowanym za pomocą __clrcall/clr.

Jeśli wyjątek zostanie przechwycony w module skompilowanym za pomocą polecenia /clr:pure, możesz zignorować to ostrzeżenie.

Aby uzyskać więcej informacji, zobacz /clr (kompilacja środowiska uruchomieniowego języka wspólnego).

Przykład

Poniższy przykład generuje kod 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
}