如何在构造函数中初始化具有相同值的对象数组

Posted

技术标签:

【中文标题】如何在构造函数中初始化具有相同值的对象数组【英文标题】:How to initialize array of objects with the same value in constructor 【发布时间】:2015-09-03 22:58:08 【问题描述】:

我正在尝试初始化具有相同值的对象数组

class A

   A(int a1)
   
      var1 = a1;
   

   var1;


int main(void)

    // I want to initialize all the objects with 5 without using an array 
    A *arr = new A[10](5); // How to use the constructor to do something like this
    return 0;

由于我想将相同的值传递给所有对象,有没有办法避免使用数组。即我想避免做以下事情:

A *arr = new A[10]5, 5, 5, 5, 5, 5, 5, 5, 5, 5

【问题讨论】:

简单的答案是使用向量,但我认为出于某种原因这是不可能的。 既然是int数组,那么简单的memset()调用怎么样? @chris 是的,由于某种原因,我不能选择向量。 @REACHUS int 只是举例。实际的数组在构造函数中可能会非常大,因此我试图查看是否可以避免不必要的内存。 std::arrayfill 函数? 【参考方案1】:

通常我们会避免使用原始指针,尤其是当未封装在 std::unique_ptr 或其他自动 (RAII) 指针类型中时。

如果大小在编译时已知,您的首选应该是 std::array,如果您想要动态大小或非常大的数组,则应该选择 std::vector

第二种选择,如果你坚持自己管理内存,是使用std::fill或者std::fill_n from <algorithm>

在这种情况下,std::fill_n 可能更干净:

A *arr = new A[10];
std::fill_n( &arr[0], 10, A(5) );

请至少考虑自动指针管理:

std::unique_ptr<A[]> arr( new A[10] );
std::fill_n( &arr[0], 10, A(5) );

【讨论】:

以上是关于如何在构造函数中初始化具有相同值的对象数组的主要内容,如果未能解决你的问题,请参考以下文章

java类中构造函数中:数组怎样初始化

在c++中如何调用数组对象的构造函数

构造函数

java构造函数

构造函数的定义和构造函数的重载

JAVA构造函数