带有重载构造函数的new []

时间:2018-03-29 16:00:02

标签: c++

我的测试代码

#include <iostream>

class Test {
    private:
        int a, b;
    public:
        Test();
        Test(int a);
        inline int getA();
        inline int getB();
};

Test::Test() : a(0), b(0) {}

Test::Test(int a) : a(a), b(0) {}

inline int Test::getA() {
    return a;
}

inline int Test::getB() {
    return b;
}

int main() {
    Test* test = new Test(3)[2];
    Test* test2 = new Test[2];
    for(int a = 0; a < 2; ++a) {
        std::cout << "test[" << a << "] = " << test[a].getA() << std::endl;
        std::cout << "test2[" << a << "] = " << test2[a].getA() << std::endl;
    }
    delete[] test;
    delete[] test2;
    return 0;
}

重要的部分是

Test* test = new Test(3)[2];

给出错误:main.cpp:26:29:错误:预期&#39;,&#39;或&#39;;&#39;之前&#39; [&#39;令牌

如果我写了

Test* test = new Test(3);

它会运行正常(如果我继续使用 - &gt;然后在代码中删除,当然)。使用new []调用重载构造函数有不同的语法,还是不可能?

1 个答案:

答案 0 :(得分:1)

您可以像这样初始化数组:

Test* test = new Test[2]{3, 3};

请注意,您必须为长度为N的数组写入N 3。