是否可以使用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);
答案 0 :(得分:5)
您正在寻找memory
标题中的std::uninitialized_fill_n
,而不是std::fill_n
标题中的algorithm
。
std::alignment_of
,或在不可用的平台上使用合适的boost替换。