考虑这个程序
#include <iostream>
using namespace std;
class sample
{
public:
sample()
{
cout << "consructor called" << endl;
throw 5;
}
void test()
{
cout << "Test function" << endl;
}
};
int main()
{
sample *s = nullptr;
try
{
s = new sample[5];
cout << "allocated" << endl;
}
catch(bad_alloc& ba)
{
cout << ba.what() << endl;
}
catch (const int& f)
{
cout << "catcting exception";
}
return 0;
}
我认为流程将是这样的。
1. Allocate the memory for 5 object.
2. call the constructor for each object one by one.
但是在这里调用构造函数时,我正在抛出一个异常,这个异常被处理掉了。我怀疑为什么构造函数不会被调用第二个对象?
答案 0 :(得分:4)
对象创建将按顺序进行,它不能一次创建所有五个对象。当第一个对象被创建时,你的构造函数将被调用,并且当它抛出异常时,它会将控制移动到异常处理程序块。
您的异常处理程序将打印相应的消息并正常退出。
尝试删除throw 5;
答案 1 :(得分:1)
new simple[5]
将为5 simple
分配内存,然后逐个开始构建它们。由于第一个执行throw 5
,因此其他4个不构造。