C ++使用new来创建具有初始化程序的对象数组

时间:2014-07-24 03:02:25

标签: c++ arrays initialization

我写了一个类,这样的东西(仅用于演示):

class cls{
public:
    cls(int a):value(a){}
private:
    int value;
};

我想动态创建一个数组,每个元素初始化为一个特定的值,如2:

cls *arr = new cls[N](2);

但是g ++报告了'错误:数组中的括号初始值设定项'。

我搜索了互联网,但却发现了类似intdouble等基本类型的类似问题,答案是不行的。

假设必须初始化类,如何解决问题?我是否必须放弃建构?

3 个答案:

答案 0 :(得分:4)

你可以:

cls *arr = new cls[3] { 2, 2, 2 };

如果您使用std::vector,则可以:

std::vector<cls> v(3, cls(2));

std::vector<cls> v(3, 2);

答案 1 :(得分:3)

使用矢量。

如果你坚持使用动态分配的数组而不是std::vector,你必须这么做:为数组分配一块内存,然后初始化所有元素一个接一个。除非你真的无法使用矢量,否则不要这样做!这仅用于教育目的。

cls* arr = static_cast<cls*>(::operator new[](N*sizeof(cls)));
for (size_t i = 0; i < N; i++) {
    ::new (arr+i) cls(2);
}
// ::delete[] arr;

答案 2 :(得分:1)

您也可以使用矢量

#include <vector>

using namespace std;

class cls{
public:
    cls(int a):value(a){}
private:
    int value;
};

int main() {

vector<cls> myArray(100, cls(2));

return 0;
}

创建一个向量(数组),其中100个cls对象用2初始化;