可能重複訪問私有副本:
Can objects with private copy constructors be thrown?VS編譯器可以男星
據我所知,當你特羅對象作爲值,副本應被創建。所以複製構造函數應該被調用,如果存在。如果複製文件存在並且是私有的,那麼這會導致編譯錯誤。這裏是代碼示例
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中都成功地編譯了該代碼並調用private ctor。 我錯了,這是非標準的行爲,並在編譯器中的錯誤?
我說得太快了。 http://ideone.com/hXrJd –
@Ation:VS曾經是最差的標準兼容的C++編譯器,主要的編譯器之一(gcc,icc,comeau等)。它的支持者說現在好多了,我個人停止使用它。 –