Поделиться через


Предупреждение компилятора (уровень 1) C4382

создание типа : тип с деструктором __clrcall или конструктором копирования можно поймать только в модуле /clr:pure.

Замечания

Параметр компилятора /clr:pure не рекомендуется использовать в Visual Studio 2015 и не поддерживается в Visual Studio 2017.

При компиляции с /clr (не /clr:pure) обработка исключений ожидает, что функции-члены в собственном типе будут __cdecl и не __clrcall. Собственные типы с функциями-членами с помощью __clrcall соглашения о вызовах не могут быть пойманы в модуле, скомпилированном с помощью /clr.

Если исключение будет поймано в модуле, скомпилированном с / clr:pure, можно игнорировать это предупреждение.

Дополнительные сведения см. в разделе /clr (компиляция CLR).

Пример

В следующем примере возникает ошибка 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
}