防止数组元素的默认构造

时间:2012-04-19 22:27:38

标签: c++ arrays

element* elements = new element[size.x];

这将使用默认构造函数构建X元素。在我的程序中,我想用不同的构造函数参数构造每个元素,如:

for(int i=0; i < size.x; ++i) 
    elements[i]  = element(i);

有没有办法防止和不必要的默认实例(我不想实现)和Operator=的不必要的调用?

3 个答案:

答案 0 :(得分:1)

如果它不会损害您的设计,您可以使用双指针来实现此

element ** elements = new element * [size.x];

for(int i=0; i < size.x; ++i) 
    elements[i]  = new element(i);

答案 1 :(得分:0)

好吧,如果这确实是一个问题,请不要使用数组。使用std::vector和默认构造函数。

  

显式向量(const Allocator&amp; = Allocator());   默认构造函数:构造一个空向量,没有内容,大小为零。

答案 2 :(得分:0)

你可以复制 - 初始化自动数组,通常会使用大括号初始化器优化直接就地构造:

elements e[] = { elements(1,2,3), elements(), elements('a', true) };

但这对动态数组不起作用。在C ++ 11中,您可以指定初始化列表,但这也是复制初始化,而不是直接初始化:

elements * e = new elements[2] { elements(1,2,3), elements('a', true) };