Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 防止数组元素的默认构造_C++_Arrays - Fatal编程技术网

C++ 防止数组元素的默认构造

C++ 防止数组元素的默认构造,c++,arrays,C++,Arrays,这将使用默认构造函数构建X元素。在我的程序中,我想用不同的构造函数参数构造每个元素,如下所示: element* elements = new element[size.x]; for(int i=0;i

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

element* elements = new element[size.x];
for(int i=0;i

是否有任何方法可以防止不必要的默认实例化(我不想实现)和对
操作符=
的不必要调用?

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

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


好吧,如果这真的是你的问题,不要使用数组。使用带有默认构造函数的
std::vector

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

您可以使用大括号初始值设定项复制initialize automatic Array,该数组通常会优化为直接就地构造:

for(int i=0; i < size.x; ++i) 
    elements[i]  = element(i);
但是,这对动态数组不起作用。在C++11中,您可以指定初始值设定项列表,但这也是复制初始化,而不是直接初始化:

elements e[] = { elements(1,2,3), elements(), elements('a', true) };
您可以使用大括号初始值设定项复制initialize automatic Array,该数组通常会优化为直接就地构造:

for(int i=0; i < size.x; ++i) 
    elements[i]  = element(i);
但是,这对动态数组不起作用。在C++11中,您可以指定初始值设定项列表,但这也是复制初始化,而不是直接初始化:

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

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

elements * e = new elements[2] { elements(1,2,3), elements('a', true) };
元素**元素=新元素*[size.x];
对于(int i=0;i
如果不影响您的设计,您可以使用双指针来实现这一点

elements * e = new elements[2] { elements(1,2,3), elements('a', true) };
元素**元素=新元素*[size.x];
对于(int i=0;i
你有什么理由不能使用
std::vector
,它可以帮你做到这一点(使用
push_back
emplace_back
)?没有理由,只是出于好奇。顺便说一句,我不明白为什么我可以在向量上使用emplace_来实现这一点,但在arraysWell
std::vector上却不能实现,所以这显然是可能的…;-]为什么不使用MaloC?@ DS1848:因为这是C++,丢失类型安全不是要争取的。有没有理由不能使用<代码> STD::vector < /代码>,这会为你做这(使用<代码> PuthSuff< <代码>或<代码> EpStReSuff<代码>)?没有理由,只是出于好奇。顺便说一句,我不明白为什么我可以在向量上使用emplace_来实现这一点,但在arraysWell
std::vector上却不能实现,所以这显然是可能的…;-]为什么不直接使用Maloc?@ DS1848:因为这是C++,丢失类型安全不是要争取的东西。