私には不明ないくつかの例外の問題に遭遇しました。C++ では、オブジェクトがスローされると、最初に一時オブジェクトにコピーされ、次に一時オブジェクトがキャッチ コードに渡されます。コピーには、オブジェクトのクラス コピー コンストラクターの使用が含まれます。私の知る限り、これは、クラスにプライベートコピーコンストラクターがある場合、例外として使用できないことを意味します。ただし、VS2010 では、次のコードがコンパイルされて実行されます。
class Except
{
Except(const Except& other) { i = 2; }
public:
int i;
Except() : i(1) {}
};
int main()
{
try
{
Except ex1;
throw ex1; // private copy constructor is invoked
}
catch (Except& ex2)
{
assert(ex2.i == 2); // assert doesn't yell - ex2.i is indeed 2
}
return 0;
}
これは合法ですか?