Le contenu de cet article est d'introduire l'allocation dynamique de mémoire et l'espace de noms en C++. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
● Utilisez le mot-clé new
pour demander de la mémoire dynamique
Quantity L'application de mémoire dynamique en C++ est basée sur le type
Quantity delete
est principalement utilisée pour la libération de mémoire
Le langage C ne prend en fait pas en charge l'allocation dynamique de mémoire, c'est via la fonction de bibliothèque malloc
Pour y parvenir, certains matériels peuvent ne pas prendre en charge malloc
du tout ; alors que C++ new
est un mot-clé, et l'allocation dynamique de mémoire peut être effectuée sur n'importe quel compilateur et n'importe quelle plate-forme matérielle. C'est la différence essentielle.
malloc
est basé sur les octets pour l'allocation dynamique de mémoire, new
est basé sur le type pour l'allocation dynamique de mémoire
// 变量申请: Type * pointer = new Type; // 从堆空间获取一个新的Type类型的空间 // 使用和C语言一样 delete pointer; // 这里指的是pointer所指向的那个元素的内存空间被释放 // 数组申请: Type * pointer = new Type[N]; // N指数组大小,数组元素个数,并非字节数 // delete[] pointer; // 数组的释放,需要在delete后面加[],和变量有区别 // delete[] 说明所要释放的指针是指向一片数组空间的,释放整个数组空间,如果用delete的话,pointer指向的是数组的首元素地址,释放的就是首元素的内存空间,其余元素的内存空间并没有释放,会造成内存泄漏
#include <stdio.h> int main() { int* p = new int; *p = 5; *p = *p + 10; printf("p = %p\n", p); printf("*p = %d\n", *p); delete p; // 指释放单个变量 p = new int[10]; // p指向一片数组空间, // p所指向的内存空间,至少占用了40个字节,保证够用,可能分配得更多 for(int i=0; i<10; i++) { p[i] = i + 1; printf("p[%d] = %d\n", i, p[i]); } delete[] p; // 释放数组 return 0; }
new
La différence entre mots-clés et malloc
fonctions :
Quantity new
Les mots-clés font partie du C++
Quantity malloc
sont des fonctions fournies par la bibliothèque C
Quantity new
Allocation de mémoire en unités de type spécifiques
Quantity malloc
Allocation de mémoire en unités d'octets
Quantitynew
Vous pouvez demander une initialisation de variable de type unique
Quantity malloc
N'a pas les caractéristiques de l'initialisation de la mémoire
new
Initialisation par mot clé :
int* pi = new int(1); float* pf = new float(2.0f); char* pc = new char('c')l
Là il n'y a qu'une seule portée globale en langage C
● Tous les identifiants globaux en langage C partagent la même portée
● Il est possible que les identifiants génèrent un conflit
Le concept d'espace de noms est proposé en C++
● L'espace de noms divise la portée globale en différentes parties
● Les identifiants dans différents espaces de noms peuvent avoir le même nom Aucun conflit ne se produira
● Les espaces de noms peuvent être imbriqués les uns dans les autres
● La portée globale est également appelée espace de noms par défaut
Définition :
namespace Name { namespace Internal { /* ... */ } /* ... */ }
dénomination Utilisation de l'espace
using namespace name; // 使用整个命名空间 using name::variable; // 使用命名空间中的变量 ::variable; // 使用默认命名空间中的变量
#include <stdio.h> namespace First { int i = 0; } namespace Second { int i = 1; namespace Internal { struct P { int x; int y; }; } } int main() { using namespace First; using Second::Internal::P; printf("First::i = %d\n", i); printf("Second::i = %d\n", Second::i); P p = {2, 3}; printf("p.x = %d\n", p.x); printf("p.y = %d\n", p.y); return 0; }
L'espace de noms résout le problème des conflits de noms de variables globales
C++ Des mots-clés spéciaux pour l'allocation dynamique de mémoire sont intégrés à
L'allocation dynamique de mémoire en C++ peut être initialisée en même temps
L'allocation dynamique de mémoire en C++ est basée sur le type
C++ Le concept d'espace de noms moyen est utilisé pour résoudre les problèmes de conflit de noms
Tutoriels vidéo associés recommandés : "Tutoriel C++"
Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il pourra être utile à l'étude de chacun. Pour un contenu plus passionnant, vous pouvez prêter attention aux colonnes de didacticiels pertinentes du site Web PHP chinois ! ! !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!