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

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

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

有什么方法可以防止和不必要的默认实例化(我不想实现)和不必要的调用Operator=

4

3 回答 3

1

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

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

for(int i=0; i < size.x; ++i) 
    elements[i]  = new element(i);
于 2012-04-19T22:43:04.633 回答
0

好吧,如果这对您来说确实是个问题,请不要使用数组。将 astd::vector与默认构造函数一起使用。

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

于 2012-04-19T22:31:21.973 回答
0

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

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

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

elements * e = new elements[2] { elements(1,2,3), elements('a', true) };
于 2012-04-19T22:33:18.180 回答