是否可以使用std::fill
来初始化非POD类型的数组?
文档说 std::fill
使用 operator=
来初始化数组而不是放置复制构造。然而,据我所知,当在未初始化的空间上调用赋值运算符时,它实际上没有机会释放任何当前内存。
示例:
struct NonPod
{
std::string myStr;
};
NonPod arr[10];
NonPod prototype;
NonPod * ptr = &arr[0];
std::fill_n(ptr, 10, prototype);
最佳答案
您正在寻找std::uninitialized_fill_n
来自 memory
header ,而不是来自 algorithm
header 的 std::fill_n
。
但是要小心!您的代码没有考虑对齐或填充 - 请考虑使用 std::alignment_of
,或者在不可用的平台上使用合适的 boost 替换。
关于c++ - 非 POD 数组上的 std::fill_n 是否可以首次初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5490756/