私が知っているように、オブジェクトを値としてトローすると、コピーが作成されます。したがって、コピーコンストラクターが存在する場合は呼び出す必要があります。コピー ctor が存在し、プライベートである場合、コンパイル エラーが発生するはずです。ここにコードサンプルがあります
class Exception {
public:
Exception() {
cout << "Exception()" << endl;
}
~Exception() {
cout << "~Exception() " << endl;
}
private:
Exception(const Exception &c) {
cout << "Exception(c)" << endl;
}
};
そして、次のコードはコンパイル エラーにつながるはずです。
try {
Exception local;
throw local;
} catch (...) {
}
しかし、VS 2005 と VS 2008 の両方で、そのコードを正常にコンパイルし、プライベート ctor を呼び出します。これが非標準の動作であり、コンパイラのエラーであるというのは間違っていますか?