1. throw语句构造异常对象。异常对象在catch结束后析构。
2. throw已有对象,发生1次拷贝。
Foo()
cout << "Foo()" << endl;
};
Foo(const Foo&)
cout << "Foo(const Foo&)" << endl;
cout << "~Foo" << endl;
try
Foo foo;
throw foo;
catch (Foo )
cout << "catch ..." << endl;
3. throw语句中构造对象,不发生拷贝。并且,该对象将在catch结束后析构。
Foo()
cout << "Foo()" << endl;
};
Foo(const Foo&)
{
cout << "Foo(const Foo&)" << endl;
~Foo()
{
cout << "~Foo" << endl;
try
throw Foo();
catch (Foo)
{
cout << "catch ..." << endl;
4. catch(命名值类型形参)发生1次拷贝。
Foo()
cout << "Foo()" << endl;
};
Foo(const Foo&)
cout << "Foo(const Foo&)" << endl;
~Foo()
cout << "~Foo" << endl;
try
throw Foo();
catch (Foo foo)
cout << "catch ..." << endl;
5. catch(未命名值类型形参)不发生拷贝。
Foo()
cout << "Foo()" << endl;
};
Foo(const Foo&)
cout << "Foo(const Foo&)" << endl;
~Foo()
cout << "~Foo" << endl;
try
throw Foo();
catch (Foo)
cout << "catch ..." << endl;
6. catch(引用类型形参)不发生拷贝。
Foo()
cout << "Foo()" << endl;
};
Foo(const Foo&)
cout << "Foo(const Foo&)" << endl;
~Foo()
cout << "~Foo" << endl;
try
catch (const Foo&)
cout << "catch ..." << endl;