J'ai deux pointeurs:La redirection d'un pointeur entraîne-t-elle une fuite de mémoire?
int *a = new int;
int *b = new int;
Maintenant, je b
ensemble égal à a
:
b=a;
Ma préoccupation concerne la mémoire qui b
pointait initialement à. Lorsque je redirige b
pour pointer vers la mémoire que a
pointe vers et tous deux pointent vers le même emplacement de mémoire. Qu'en est-il de l'emplacement mémoire précédent de b, est-il libéré ou est-il en fuite de mémoire?
Pour éviter la fuite de mémoire dois-je faire de cette façon:
delete b;
b=a;
Bien sûr, ce code fuit la mémoire comme un tamis. – user0042
Il n'y a pas de garbage collection en C++, donc sans le 'delete' c'est une fuite de mémoire. (Aussi en C++ moderne, vous devriez préférer les pointeurs intelligents aux pointeurs bruts pour cette raison) – UnholySheep
Si vous pensez avoir besoin de pointeurs, vous en aurez rarement besoin pour des valeurs simples de types simples comme 'int'. Considérons ensuite les conteneurs standards ['std :: array'] (http://en.cppreference.com/w/cpp/container/array) et [' std :: vector'] (http: //en.cppreference. com/w/cpp/conteneur/vecteur). Considérez ensuite les pointeurs intelligents comme ['std :: unique_ptr'] (http://en.cppreference.com/w/cpp/memory/unique_ptr) et [' std :: shared_ptr'] (http: //en.cppreference. com/w/cpp/mémoire/shared_ptr). Ensuite et seulement ensuite, considérez les pointeurs simples. –