Comment allouer dynamiquement des tableaux en C++
Je sais comment allouer dynamiquement de l'espace pour un tableau en C. Il peut être fait comme suit:
L = (int*)malloc(mid*sizeof(int));
et la mémoire peut être libéré par:
free(L);
Comment puis-je obtenir l'équivalent en C++?
Plus précisément, comment puis-je utiliser le new
et delete[]
de mots-clés? En particulier dans le contexte de la création/destruction d'une liste liée nœud, ou la création et la destruction d'un tableau dont la taille est donnée par une variable au cours de la compilation?
- Je vous suggère fortement de regarder l'index (ou table des matières) de votre référence C++ pour les "nouvelles" ou "opérateur de nouveau" ou "dynamique de la mémoire". Toute bonne référence doit dire comment allouer et désallouer de la mémoire.
- Utilisation
std::vector
. - Voici une pléthore de StackOverflow Articles sur l'allocation de mémoire pour le C++.
- Pour les paresseux de la recherche, j'ai utilisé Google pour c++ dynamique de la mémoire exemple.
Vous devez vous connecter pour publier un commentaire.
pour les tableaux (qui est ce que vous voulez) ou
des éléments singuliers.
Mais il est plus simple d'utiliser un vecteur ou utiliser smartpointers, alors vous n'avez pas à vous soucier de la gestion de la mémoire.
L.data()
vous donne accès à laint[]
tableau tampon et vous pouvezL.resize()
le vecteur plus tard.L.get()
vous donne un pointeur vers leint[]
tableau.allouer de la mémoire à l'aide de la
new
de l'opérateur et de libérer un pointeur à l'aide dedelete
de l'opérateur. Notez que vous ne pouvez pas supprimer des variables normales, seuls les pointeurs et les tableaux peuvent être supprimés après l'accomplissement de leur tâche.un programme complet
résultat
En C++, nous avons les méthodes d'allouer et désallouer la mémoire dynamique.Les variables peuvent être alloués dynamiquement en utilisant
new
opérateur,Les tableaux ne sont rien, mais juste de la collecte de mémoire contiguë endroits, par conséquent, nous pouvons allouer dynamiquement des tableaux en C++,
et vous pouvez simplement utiliser
delete
pour la libération de la allouée dynamiquement l'espace, comme suit,pour les variables,
pour les tableaux,
Vous devez être extrêmement prudent lors de l'utilisation brute des pointeurs avec dynamique de la mémoire, mais voici un exemple simple.
Pour éviter les fuites de mémoire; pend des pointeurs, la suppression de la mémoire au début de l'etc. Essayez d'utiliser des pointeurs intelligents. Ils viennent dans deux variétés: partagé et unique.
SomeClass.h
SomeClass.cpp
Ancienne De L'Utilisation De La Mémoire Dynamique
Le problème ici est de savoir quand, où et pourquoi de supprimer de la mémoire; de savoir qui est responsable. Si vous effacer la mémoire de la gérer et de l'utilisateur de votre code ou de la bibliothèque suppose que vous n'avez pas et qu'ils le supprimer il y a un problème, puisque la même mémoire est d'essayer d'être supprimé à deux reprises. Si vous le laissez à l'utilisateur de les supprimer et ils ont supposé que vous avez fait et ils ne le font pas, vous avez un problème et il y a une fuite de mémoire. C'est là que l'utilisation des pointeurs intelligents venir dans maniable.
Smart Pointeur De La Version
Ici Sont pour la Référence des Liens À la Fois Partagé & Unique Pointeurs
https://msdn.microsoft.com/en-us/library/hh279669.aspx
https://msdn.microsoft.com/en-us/library/hh279676.aspx
Informations suivantes seront utiles :
Source : https://www.learncpp.com/cpp-tutorial/6-9a-dynamically-allocating-arrays/
Initialisation des tableaux alloués dynamiquement
Si vous souhaitez initialiser un tableau alloué dynamiquement à 0, la syntaxe est assez simple:
Avant C++11, il n'y a pas de moyen facile pour initialiser un tableau dynamique à une valeur non nulle (initialiseur de listes n'a travaillé que pour les tableaux). Il s'agit d'une boucle sur le tableau et lui affecter des valeurs des éléments explicitement.
Super gênant!
Cependant, à partir de C++11, il est maintenant possible d'initialiser les tableaux dynamiques à l'aide de l'initialiseur de listes!
Notez que cette syntaxe n'a pas l'opérateur= entre la longueur du tableau et la liste d'initialiseur.
Pour des raisons de cohérence, en C++11, fixe les tableaux peuvent aussi être initialisé à l'aide de l'initialisation uniforme:
Une mise en garde, en C++11, vous ne pouvez pas initialiser un allouée dynamiquement char tableau à partir d'un C-style de la chaîne:
Si vous avez un besoin pour ce faire, allouer dynamiquement un std::string à la place (ou de les affecter votre char tableau et puis strcpy la chaîne).
Également de noter que les tableaux dynamiques doivent être déclarés avec une longueur explicite: