为什么构造函数没有调用数组中的第二个对象

时间:2015-02-19 05:56:04

标签: c++ constructor

考虑这个程序

#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.

但是在这里调用构造函数时,我正在抛出一个异常,这个异常被处理掉了。我怀疑为什么构造函数不会被调用第二个对象?

2 个答案:

答案 0 :(得分:4)

对象创建将按顺序进行,它不能一次创建所有五个对象。当第一个对象被创建时,你的构造函数将被调用,并且当它抛出异常时,它会将控制移动到异常处理程序块。

您的异常处理程序将打印相应的消息并正常退出。

尝试删除throw 5;

答案 1 :(得分:1)

new simple[5]将为5 simple分配内存,然后逐个开始构建它们。由于第一个执行throw 5,因此其他4个不构造。