如何在构造函数中初始化具有相同值的对象数组
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::array
有fill
函数?
【参考方案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) );
【讨论】:
以上是关于如何在构造函数中初始化具有相同值的对象数组的主要内容,如果未能解决你的问题,请参考以下文章