我已经遇到了一些例外的问题是我不清楚。 在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;
}
这是合法的吗?