Condividi tramite


Avviso del compilatore (livello 1) C4382

throwing 'type': un tipo con __clrcall distruttore o costruttore di copia può essere intercettato solo in /clr:pure module

Osservazioni:

L'opzione del compilatore /clr:pure è deprecata in Visual Studio 2015 e non supportata in Visual Studio 2017.

Quando viene compilato con /clr (non /clr:pure), la gestione delle eccezioni prevede che le funzioni membro in un tipo nativo siano __cdecl e non __clrcall. I tipi nativi con funzioni membro che usano __clrcall la convenzione di chiamata non possono essere rilevati in un modulo compilato con /clr.

Se l'eccezione verrà intercettata in un modulo compilato con /clr:pure, è possibile ignorare questo avviso.

Per altre informazioni, vedere /clr (Compilazione Common Language Runtime).

Esempio

L'esempio seguente genera l'errore 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
}