第一次初始化可能的非POD数组上的std :: fill_n?

时间:2011-03-30 18:48:34

标签: c++ fill initialization

是否可以使用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);

1 个答案:

答案 0 :(得分:5)

您正在寻找memory标题中的std::uninitialized_fill_n,而不是std::fill_n标题中的algorithm

但是,请小心!您的代码不考虑对齐或填充 - 考虑使用std::alignment_of,或在不可用的平台上使用合适的boost替换。