编译器警告(等级 1)C4382
引发“type”: 带有 __clrcall 析构函数或复制构造函数的类型只能在 /clr:pure 模块中捕获
备注
“/clr:pure”编译器选项在 Visual Studio 2015 中已弃用,在 Visual Studio 2017 中不受支持。
使用 /clr(而不是 /clr:pure)编译时,异常处理需要本机类型中的成员函数 __cdecl,而不是 __clrcall。 在使用 /clr 编译的模块中,无法捕获具有使用 __clrcall
调用约定的成员函数的本机类型。
如果将在使用 /clr:pure 编译的模块中捕获异常,则可以忽略此警告。
有关详细信息,请参阅 /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
}