Création et libération dynamiques d'objets
1 Syntaxe de base de nouveau et de suppression
1) Dans le processus de développement logiciel, il est souvent nécessaire d'allouer et d'annuler dynamiquement de l'espace mémoire, tel comme dans les listes chaînées dynamiques Insertion et suppression de nœuds. En langage C, les fonctions de bibliothèque malloc et free sont utilisées pour allouer et désallouer de l'espace mémoire. C fournit des opérateurs new et delete plus simples et plus puissants pour remplacer les fonctions malloc et free.
Remarque : new et delete sont des opérateurs, pas des fonctions, leur exécution est donc efficace.
2) Bien que C conserve toujours les fonctions malloc et free afin d'être compatible avec le langage C, il est recommandé aux utilisateurs d'utiliser les opérateurs new et delete au lieu des fonctions malloc et free. Exemples de l'opérateur new :
new int; //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针) new int(100); //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址 new char[10]; //开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址 new int[5][4]; //开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址 float *p=new float (3.14159); //开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p
Vous ne pouvez pas spécifier de valeur initiale lors de l'allocation de l'espace du tableau avec new. Si l'espace ne peut pas être alloué normalement en raison d'une mémoire insuffisante ou d'autres raisons, new renverra un pointeur nul NULL et l'utilisateur pourra juger si l'allocation d'espace est réussie en fonction de la valeur du pointeur.
Exemples d'application
2 Création et libération dynamiques d'objets de classe
Les objets définis à l'aide de noms de classe sont statiques, pendant le du programme, l'espace occupé par l'objet ne peut à aucun moment être libéré. Mais parfois, les gens souhaitent créer un objet lorsqu’il est nécessaire, le détruire lorsqu’il n’est plus nécessaire et libérer l’espace mémoire qu’il occupe pour d’autres données. Cela améliore l'utilisation de l'espace mémoire.
En C, vous pouvez utiliser l'opérateur new pour créer dynamiquement un objet, et l'opérateur delete pour annuler l'objet
Par exemple :
Box *pt // Définir un pointeur vers l'objet de classe Box La variable pointeur pt
pt=new Box; //L'adresse de départ du nouvel objet est stockée dans pt
Ce nouvel objet est accessible via pt dans le programme. Tel que
coutheight; // Afficher le membre de hauteur de l'objet
coutvolume( ); de l'objet Fonction, calculer et sortir le volume
C permet également d'initialiser l'objet nouvellement créé lors de l'exécution de new. Par exemple,
Box *pt=new Box(12,15,18);
Cette façon d'écrire combine les deux instructions ci-dessus (définissant des variables de pointeur et utilisant new pour créer de nouveaux objets) en une seule instruction et spécifiez la valeur initiale. C'est plus raffiné.
La hauteur, la largeur et la longueur du nouvel objet obtiennent respectivement les valeurs initiales 12, 15 et 18. L'objet peut être appelé soit par son nom, soit par un pointeur.
Lors de l'exécution de la nouvelle opération, si la quantité de mémoire est insuffisante et que l'espace mémoire requis ne peut pas être ouvert, la plupart des systèmes de compilation C actuels feront en sorte que new renvoie une valeur de pointeur 0. Tant que vous vérifiez si la valeur de retour est 0, vous pouvez déterminer si l'allocation de mémoire est réussie.
La norme ANSI C propose que lorsqu'un échec se produit lors de l'exécution de new, une « exception » sera « levée » et l'utilisateur peut effectuer le traitement pertinent en fonction de l'exception. Mais le standard C permet toujours de renvoyer une valeur de pointeur de 0 lorsqu'un nouveau défaut survient. Actuellement, différents systèmes de compilation gèrent les nouveaux échecs de différentes manières.
Lorsque l'objet créé par new n'est plus nécessaire, vous pouvez utiliser l'opérateur delete pour le libérer. Tel que
delete pt; //Libérez l'espace mémoire pointé par pt
Cela annule l'objet pointé par pt. L'objet ne pourra plus être utilisé par le programme par la suite.
Si vous utilisez une variable de pointeur pt pour pointer vers différents objets dynamiques les uns après les autres, vous devez faire attention au pointeur actuel de la variable de pointeur pour éviter de supprimer le mauvais objet. Lorsque l'opérateur de suppression est exécuté, le destructeur est automatiquement appelé pour terminer le travail de nettoyage avant de libérer de l'espace mémoire.
3 Analyse approfondie de new et malloc
Tests mixtes, comparaison des similitudes et des différences
Conclusion : malloc n'appellera pas le constructeur de la classe
Free n'appellera pas le destructeur de la classe
Ce qui précède est le contenu du quatrième résumé des points de révision C Nouveau et supprimé Pour. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois ( www.php.cn) !