编译器警告(等级 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
}