例外をスローするたびに使用されるカスタム エラー クラスがあります。
class AFX_CLASS_EXPORT CCLAError : public CObject
次のコピー コンストラクターが定義されています。
CCLAError(const CCLAError& src) { AssignCopy(&src); } // (AssignCopy is a custom function)
これは、MSVC6 (Visual Studio 2003) で作成およびコンパイル/リンクされたものです。MSVC8 + (VS 2008 +) に対してコンパイルおよびリンクするために必要な変更を行っているところです。
msvc8 リンカーが呼び出されると、次のエラーが発生します。
LNK2001: unresolved external symbol "private: __thiscall CObject::CObject(class CObject const &)" (??0CObject@@AAE@ABV0@@Z)
エラーが私に伝えていることを理解しています.CObjectの子に対してコピーコンストラクターが定義されていないため、コピーコンストラクターが定義されていないため、CObjectに到達するまで継承ツリーを上ります。
を定義して最初にスローするライブラリをコンパイルするときに最初にエラーを見たのでCCLAError
、それが原因であるかのように処理を進めています。
変更することでエラーを解決できました
throw CCLAError( ... )
に
throw new CCLAError( ... )
と
catch(CCLAError& e)
{
throw e;
}
に
catch(CCLAError& e)
{
throw;
}
ただし、キャッチされた例外を再スローするとコピー コンストラクターが呼び出される理由がわかりません。完全に明らかな何かが欠けていますか?その後、キャッチされた例外への参照を保持する変数を削除すると、コピー コンストラクターが呼び出されなくなるのはなぜですか?