Home >Backend Development >C#.Net Tutorial >Introduction to dynamic memory allocation and namespace in C++

Introduction to dynamic memory allocation and namespace in C++

青灯夜游
青灯夜游forward
2019-03-28 13:14:222321browse

The content of this article is to introduce dynamic memory allocation and namespace in C. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

1. Dynamic memory allocation in C

● Use the new keyword to apply for dynamic memory

●●Dynamic memory application in C is based on type

deleteThe key is used for memory release

C language actually does not support dynamic memory allocation , is implemented through the malloc library function. There may be some hardware that does not support malloc at all; and C new is a keyword, regardless of whether it is used in any compiler On any hardware platform, dynamic memory allocation is possible. This is the essential difference.

malloc is based on bytes for dynamic memory allocation, new is based on type for dynamic memory allocation

// 变量申请:
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;
}

The difference between the new keyword and the malloc function:

● newThe keyword is part of C

malloc is a function provided by the C library

newAllocates memory in units of specific types

mallocMemory allocation in bytes

● newCan be initialized when applying for a single type variable

● mallocDoes not have memory Characteristics of initialization

newKeyword initialization:

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

2. Namespace in C

In C language There is only one global scope in

●All global identifiers in C language share the same scope

● There may be conflicts between identifiers

Naming was proposed in C The concept of space

● Namespace divides the global scope into different parts

● Identifiers in different namespaces can have the same name without conflict

● Namespace Can be nested in each other

●The global scope is also called the default namespace

Definition:

namespace Name
{
    namespace Internal
    {
        /* ... */
    }
    /* ... */
}

Use of namespace

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;
}

The namespace solves the global problem Problems with variable naming conflicts

3. Summary

C has built-in special keywords for dynamic memory allocation

Dynamic in C Memory allocation can be initialized at the same time

Dynamic memory allocation in C is based on type

The namespace concept in C is used to solve the name conflict problem

Related Recommended video tutorial: "C Tutorial"

The above is the entire content of this article, I hope it will be helpful to everyone's learning. For more exciting content, you can pay attention to the relevant tutorial columns of the PHP Chinese website! ! !

The above is the detailed content of Introduction to dynamic memory allocation and namespace in C++. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete