Maison  >  Article  >  développement back-end  >  Introduction à l'allocation dynamique de mémoire et à l'espace de noms en C++

Introduction à l'allocation dynamique de mémoire et à l'espace de noms en C++

青灯夜游
青灯夜游avant
2019-03-28 13:14:222281parcourir

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.

1. Allocation dynamique de mémoire en C++

● 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 newLes mots-clés font partie du C++

 Quantity malloc sont des fonctions fournies par la bibliothèque C

Quantity newAllocation de mémoire en unités de type spécifiques

Quantity mallocAllocation de mémoire en unités d'octets

QuantitynewVous pouvez demander une initialisation de variable de type unique

Quantity mallocN'a pas les caractéristiques de l'initialisation de la mémoire

newInitialisation par mot clé :

int*   pi = new int(1);
float* pf = new float(2.0f);
char*  pc = new char('c')l

2. Nommer dans l'espace C++

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

3 Résumé

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer