'class_type' : デストラクターとしてキャッチできない、またはコピー コンストラクターがアクセスできないか削除されている、またはその両方です
値または参照によって例外がキャッチされましたが、コピー コンストラクター、代入演算子、またはその両方にアクセスできませんでした。
解説
Visual Studio 2015 の準拠の変更により、CException
から派生した MFC 例外の不正な catch ステートメントにこのエラーが適用されました。 CException
には継承されたプライベート コピー コンストラクターが含まれたため、 クラスとその派生クラスはコピーできません。また、値渡しすることはできません。これは、値でキャッチできないことも意味します。 MFC 例外を値でキャッチした catch ステートメントは、以前は実行時にキャッチされない例外につながりました。 現在、コンパイラはこの状況を正しく識別し、エラー C2316 を報告するようになりました。 この問題を解決するには、独自の例外ハンドラーを記述するのではなく、MFC TRY/CATCH マクロを使用することをお勧めします。 コードに適していない場合は、代わりに参照によって MFC 例外をキャッチします。
例
次の例では、C2316 を生成し、その修正方法を示しています。
// C2316.cpp
// compile with: /EHsc
#include <stdio.h>
struct B
{
public:
B() {}
// Delete the following line to resolve.
private:
// copy constructor
B(const B&) {}
};
void f(const B&)
{
}
int main()
{
try
{
B aB;
f(aB);
}
catch (B b) // C2316
{
printf_s("Caught an exception!\n");
}
}