smart pointeurs et les tableaux
Comment pointeurs intelligents en charge les tableaux? Par exemple,
void function(void)
{
std::unique_ptr<int> my_array(new int[5]);
}
Quand my_array
est hors de portée et obtient détruits, l'ensemble du tableau d'entiers re-réclamé? N'est que le premier élément du tableau récupéré? Ou est-il autre chose (comme un comportement indéfini)?
Vous devez vous connecter pour publier un commentaire.
Il va appeler
delete[]
et donc l'ensemble de la matrice de remise en état, mais je crois que vous devez indiquer que vous êtes en utilisant une matrice de la forme deunique_ptr
par:C'est appelé comme Partielle Spécialisation de la
unique_ptr
.typedef int (three_ints)[3]; template<typename T> void function(void) { unique_ptr<T> p(new T); } function<three_ints>();
std::~unique_ptr<int[]>()
vraiment appelerdelete []
plutôt quedelete
? Je ne suis pas vraiment sûr...Edit: la réponse était erronée, comme l'ont expliqué les commentaires ci-dessous. Voici ce que j'ai d'abord dit:
Je pars ici parce que j'ai appris quelque chose, espérons que d'autres aussi.
new[]
vous devez utiliserdelete[]
etstd::unique_ptr
est assez intelligent pour gérer ce ainsi que de nombreuses autres améliorations, qui est pourquoi il remplacerastd::auto_ptr
bientôt.delete
doit toujours être utilisé uniquement avecnew
; de mêmedelete[]
doit toujours être utilisé uniquement avecnew[]
. Voir C++2003, la section 5.3.5 (expr.supprimer), paragraphe 2.