61 votes

pointeurs et tableaux intelligents

Comment les pointeurs intelligents gèrent-ils les tableaux ? Par exemple,

void function(void)
{
    std::unique_ptr<int> my_array(new int[5]);
}

Lorsque my_array sort de son champ d'application et est détruit, est-ce que le tableau d'entiers est entièrement récupéré ? Est-ce que seul le premier élément du tableau est récupéré ? Ou y a-t-il quelque chose d'autre qui se passe (comme un comportement non défini) ?

98voto

Alok Save Points 115848

Il appellera delete[] et donc le tableau entier sera récupéré mais je pense que vous devez indiquer que vous utilisez une forme de tableau de unique_ptr par :

std::unique_ptr<int[]> my_array(new int[5]);

C'est ce qu'on appelle Spécialisation partielle de la unique_ptr .

6voto

Nathan Monteleone Points 3182

Edit : Cette réponse était fausse, comme l'expliquent les commentaires ci-dessous. Voici ce que j'ai dit à l'origine :

Je ne pense pas que std::unique_ptr sache qu'il faut appeler delete[]. Il a effectivement a un int* comme membre -- quand vous supprimez un int*, il va supprimer le supprimer le tableau entier, donc dans ce cas, tout va bien.

Le seul but du delete[] par rapport à un delete normal est que qu'il appelle les destructeurs de chaque élément du tableau. Pour les types cela n'a pas d'importance.

Je le laisse ici parce que j'ai appris quelque chose - j'espère que d'autres l'apprendront aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X