make_unique value是否初始化char数组

时间:2017-02-09 15:09:24

标签: c++ c++11 memory c++14 smart-pointers

例如 -

#include <memory>

int main(){
    const auto bufSize = 1024;
    auto buffer = std::make_unique<char[]>(bufSize);
}

此处的缓冲区是否已填充'\0'个字符,或者我必须手动填充它以避免垃圾值。

这样做的可行方法是什么,std::memset(&buffer.get(), 0, bufSize)会满足吗?

3 个答案:

答案 0 :(得分:16)

如果您不提供构造函数参数,则所有make_*函数都会对该类型使用值初始化。由于make_unique的数组形式不接受任何参数,因此它会将元素清零。

答案 1 :(得分:5)

是的,所有元素都是value initialized std::make_unique

  

该功能相当于:

unique_ptr<T>(new typename std::remove_extent<T>::type[size]())

  

值初始化

     

这是构造变量时执行的初始化   使用空的初始化程序。

     

语法

new T (); (2)

  

值初始化的影响是:

     

3)如果T是数组类型,则数组的每个元素都是   值初始化;
  4)否则,对象被零初始化。

然后对于char类型的每个元素,它们将被初始化(零初始化)为'\0'

答案 2 :(得分:4)

根据cppreference,是的:

  

2)构造一个未知边界T的数组。如果T是未知边界的数组,则此重载仅参与重载解析。该功能相当于:

unique_ptr<T>(new typename std::remove_extent<T>::type[size]())
                                       value initialization ^

我指出的值初始化。