例えば -
_#include <memory>
int main(){
const auto bufSize = 1024;
auto buffer = std::make_unique<char[]>(bufSize);
}
_
ここのバッファーはすでに_'\0'
_文字で埋められていますか、それともガベージ値を回避するために手動で埋める必要がありますか?.
そして、これを行うための可能な方法は何でしょうか、std::memset(&buffer.get(), 0, bufSize)
で十分でしょうか?
すべてのmake_*
関数は、コンストラクターパラメーターを指定しない場合、型の値の初期化を使用します。配列形式のmake_unique
はパラメーターを取らないので、要素をゼロにします。
はい、すべての要素は std :: make_unique によって 初期化された値 になります。
この関数は次のものと同等です。
unique_ptr<T>(new typename std::remove_extent<T>::type[size]())
そして
値の初期化
これは、変数が空のイニシャライザで構築されるときに実行される初期化です。
構文
new T (); (2)
そして
値の初期化の影響は次のとおりです。
3)
T
が配列型の場合、配列の各要素は値で初期化されます。
4)それ以外の場合、オブジェクトはゼロで初期化されます。
次に、タイプchar
の各要素について、値を'\0'
に初期化(ゼロ初期化)します。
cppreference によると、はい:
2)未知の境界Tの配列を作成します。このオーバーロードは、Tが未知の境界の配列である場合にのみ、オーバーロードの解決に参加します。この関数は次のものと同等です。
unique_ptr<T>(new typename std::remove_extent<T>::type[size]()) value initialization ^
私が示した値の初期化。