web-dev-qa-db-fra.com

la valeur make_unique initialise le tableau de caractères

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?

20
Abhinav Gauniyal

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.

19
Nicol Bolas

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'.

7
songyuanyao

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.

5
eerorika