Qu'est-ce que C++ version de realloc(), répartir la nouvelle tampon et de copier le contenu de l'ancien?
En C, nous avons utilisé malloc(), free()
, mais en C++ youare à l'aide de new, delete
, mais en C, nous ont également realloc
, qui alloc le nouveau bloc et copier les anciennes données (minimum commun), puis libérer les anciennes données bock. Alors, quelle est la version C++ de qui? Je peux écrire mon propre bien sûr, mais est-il un builtin chose?
main() {
int i; char *x = malloc(3);
x[0] = 10;
x[1] = 20;
x[2] = 30;
realloc(x, 4);
x[3] = 40;
for (i = 0; i < 4; i++) printf("%i\n", x[i]);
}
- Il n'y a pas d'équivalent de realloc en C++.
- J'aimerais utiliser un std::vector pour que
- Quelqu'un sait-il si l'un std::vector implémentations utilisent C gestion de la mémoire pour POD types?
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas
new
/delete
équivalent derealloc
en C++.De Bjarne Stroustrup de la FAQ :
Si vous voulez un redimensionnables conteneur, il suffit d'utiliser
std::vector
, sinon rester avecmalloc
,realloc
etfree
.Et, pour répondre à votre dernière question, la version C++ de votre code serait :
Voyons ce que Bjarne Stroustrup pense!
Pourquoi ne pas en C++ un équivalent realloc()?
realloc
n'est pas utilisé en C++ et C++ veut utiliser sa copie par défaut et les constructeurs et destructeurs pour ce genre de choses en général. Mais si vous avez de la plaine de vieux types que vous souhaitez traiter aussi vite que possible, il n'y a pas de raison de ne pas rouler votre propre tableau de classe qui fait ce que vous voulez. Je suis surpris de voir qu'il n'en est pas une c'est surtout STL-compatible déjà dans le haut de la page de Google.C++ n'est pas un
new/delete
équivalent de Crealloc
.La raison probable (bien qu'il n'est mentionné nulle part dans la Norme) est à cause de constructeurs qui peuvent jeter: comment devrait-il se comporter si, tout en réaffectant, un constructeur lève? Le traitement de cette affaire est préférable de laisser le programmeur car il n'existe pas de véritable réponse.