push a écrit :
Tiens je me suis posé la question ya pas longtemps à propos du realloc, donc quand c'est possible un realloc ne fait pas de copie + déplacement ? même chose en C++ pour un std::vector quand c'est possible alors je suppose ? je suppose aussi que c'est dépendant de l'implémentation ?
|
En C, après un realloc, il ne faut pas s'appuyer sur le fait que parfois, il n'y aura pas copie + déplacement. Notament si tu as des pointeurs (pointants la ou tu veux réallouer) , ils peuvent etre rendu invalides suite à un realloc.
En C++, avec std::vector, c'est encore plus traitre. Un accroissement de std::vector (quelqu'en soit la cause) est susceptible d'invalider des itérateurs.
Pour prévoir l'accroissement d'un std::vector, tu ne peux meme pas t'appuyer (de manière totalement portable) sur la stratégie d'allocation du "2*N". --> reserve()