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

标签 c++ arrays initialization

<分区>

我写了一个类,像这样(只是为了演示):

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

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

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

但是 g++ 报告“错误:数组 new 中带括号的初始值设定项”。

我在网上搜索了一下,发现类似intdouble等基本类型的问题,答案是NO WAY。

假设类必须初始化,如何解决这个问题?我必须放弃构造函数吗?

最佳答案

使用 vector 。

如果您坚持使用动态分配的数组而不是std::vector,则您必须采取艰难的方式:为数组分配一 block 内存,然后将所有元素一一初始化。 不要这样做,除非你真的不会使用 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;

关于C++使用new创建带有初始化程序的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24924434/

相关文章:

c# - 需要初始化的接口(interface)实现

objective-c - 如何在构造函数中初始化 Objective-C 结构?

ios - 如何在 iOS UITableViewController 中初始化一个属性

c++ - 位域的内存位置

php - 使用哈希表访问 C 中的 PHP 变量 - 指针间接级别的更改

php - 将多个数组(不同长度)的列值压入一个平面数组

c - 空指针数组: valgrind gives invalid write size of 8

c++ - 如何在 ImageMagick 中使用英特尔 IPL 库以及如何从 IPL 转换为 ImageMagick?

c++ - 如果第二个参数在其中一次迭代中发生变化, 'for' 循环的迭代次数是否会发生变化?

javascript - 如何使用 gulp Replace 将字符串替换为数组中的值