C++ 防止数组元素的默认构造
这将使用默认构造函数构建X元素。在我的程序中,我想用不同的构造函数参数构造每个元素,如下所示:C++ 防止数组元素的默认构造,c++,arrays,C++,Arrays,这将使用默认构造函数构建X元素。在我的程序中,我想用不同的构造函数参数构造每个元素,如下所示: element* elements = new element[size.x]; for(int i=0;i
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_来实现这一点,但在arraysWellstd::vector上却不能实现,所以这显然是可能的…;-]为什么不使用MaloC?@ DS1848:因为这是C++,丢失类型安全不是要争取的。有没有理由不能使用<代码> STD::vector < /代码>,这会为你做这(使用<代码> PuthSuff< <代码>或<代码> EpStReSuff<代码>)?没有理由,只是出于好奇。顺便说一句,我不明白为什么我可以在向量上使用emplace_来实现这一点,但在arraysWellstd::vector上却不能实现,所以这显然是可能的…;-]为什么不直接使用Maloc?@ DS1848:因为这是C++,丢失类型安全不是要争取的东西。