Par exemple -
#include <memory>
int main(){
const auto bufSize = 1024;
auto buffer = std::make_unique<char[]>(bufSize);
}
Le tampon est-il déjà rempli de caractères '\0'
Ou devrai-je le remplir manuellement pour éviter les valeurs inutiles.
Et quelle serait la manière possible de le faire, est-ce que std::memset(&buffer.get(), 0, bufSize)
suffira?
Toutes les fonctions make_*
Utilisent l'initialisation de valeur pour le type si vous ne fournissez pas de paramètres de constructeur. Puisque la forme de tableau de make_unique
Ne prend aucun paramètre, elle mettra à zéro les éléments.
Oui, tous les éléments seront valeur initialisée par std :: make_unique .
La fonction équivaut à:
unique_ptr<T>(new typename std::remove_extent<T>::type[size]())
et
initialisation de la valeur
Il s'agit de l'initialisation effectuée lorsqu'une variable est construite avec un initialiseur vide.
Syntaxe
new T (); (2)
et
Les effets de l'initialisation de la valeur sont:
3) si
T
est un type de tableau, chaque élément du tableau est initialisé en valeur;
4) sinon, l'objet est initialisé à zéro.
puis pour chaque élément de type char
, ils seront initialisés en valeur (initialisés à zéro) en '\0'
.
Selon cppreference , oui:
2) Construit un tableau de bornes inconnues T. Cette surcharge ne participe à la résolution de surcharge que si T est un tableau de bornes inconnues. La fonction équivaut à:
unique_ptr<T>(new typename std::remove_extent<T>::type[size]()) value initialization ^
Initialisation de la valeur indiquée par moi.