make_unique value是否初始化char数组

Abh*_*yal 18 c++ memory smart-pointers c++11 c++14

例如 -

#include <memory>

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

这里的缓冲区是否已经填充了'\0'字符,或者我必须手动填充它以避免垃圾值.

什么可能的方法,这样就std::memset(&buffer.get(), 0, bufSize)足够了?

Nic*_*las 20

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


son*_*yao 7

是的,所有元素都将由std :: make_unique 初始化.

该功能相当于:

unique_ptr<T>(new typename std::remove_extent<T>::type[size]())
Run Code Online (Sandbox Code Playgroud)

值初始化

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

句法

new T (); (2)
Run Code Online (Sandbox Code Playgroud)

值初始化的效果是:

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

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


eer*_*ika 5

根据cppreference,是的:

2)构造一个未知范围T的数组。如果T是一个未知范围的数组,则此重载仅参与重载解析。该功能等效于:

unique_ptr<T>(new typename std::remove_extent<T>::type[size]())
                                       value initialization ^
Run Code Online (Sandbox Code Playgroud)

我指示的值初始化。