>  기사  >  백엔드 개발  >  C++의 동적 메모리 할당 및 네임스페이스 소개

C++의 동적 메모리 할당 및 네임스페이스 소개

青灯夜游
青灯夜游앞으로
2019-03-28 13:14:222280검색

이 글의 내용은 C++의 동적 메모리 할당과 네임스페이스를 소개하는 것입니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

1. C++의 동적 메모리 할당

new 키워드를 통해 동적 메모리 애플리케이션용 new关键字进行动态内存申请

 ● C++中的动态内存申请时基于类型进行的

 ● delete关键用于内存释放

C语言其实是不支持动态内存分配的,是通过malloc库函数来实现的,可能有一些硬件根本不支持malloc;而C++ new是一个关键字,不管在任意编译器上,任意硬件平台上都是能够进行动态内存分配的,这是本质区别。

malloc是基于字节来进行动态内存分配的,new则是基于类型来进行动态内存分配

// 变量申请:
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关键字与malloc函数的区别:

 ● new关键字是C++的一部分

 ● malloc是由C库提供的函数

 ● new以具体的类型为单位进行内存分配

 ● malloc以字节为单位进行内存分配

 ● new在申请单个类型变量时可以进行初始化

 ● malloc不具备内存初始化的特性

new

● C++의 동적 메모리 애플리케이션은

● 메모리 릴리스에 delete 키가 사용됩니다#🎜 🎜 #

C 언어는 실제로 동적 메모리 할당을 지원하지 않습니다. 이는 malloc 라이브러리 함수를 통해 구현됩니다. 일부 하드웨어에서는 이를 전혀 지원하지 않을 수 있습니다.malloc; 및 C++ new는 모든 컴파일러 및 하드웨어 플랫폼에서 수행될 수 있는 키워드입니다.

malloc은 동적 메모리 할당을 위한 바이트를 기반으로 하고, new는 동적 메모리 할당을 위한 유형을 기반으로 합니다.

int*   pi = new int(1);
float* pf = new float(2.0f);
char*  pc = new char('c')l
namespace Name
{
    namespace Internal
    {
        /* ... */
    }
    /* ... */
}
# 🎜🎜# new 키워드와 malloc 함수의 차이점:

● new 키워드는 C++의 일부입니다

● malloc는 C 라이브러리에서 제공하는 함수입니다

● new 타입 단위로 메모리 할당

● malloc바이트 단위로 메모리 할당

● new 초기화 가능 단일형 변수 적용시 수행

● malloc은 메모리 초기화 기능이 없습니다

new 키워드 초기화:

using namespace name;     // 使用整个命名空间
using name::variable;     // 使用命名空间中的变量
::variable;                // 使用默认命名空间中的变量

2. C++의 네임스페이스

C 언어에는 전역 범위가 하나만 있습니다#🎜🎜 #● ●C 언어의 모든 전역 식별자는 동일한 범위를 공유합니다

●식별자 간 충돌 가능성

네임스페이스 개념은 C++에서 제안

● 네임스페이스 전역 범위를 여러 부분으로 나눕니다

● 서로 다른 네임스페이스의 식별자는 충돌 없이 동일한 이름을 가질 수 있습니다.

● 네임스페이스는 서로 중첩될 수 있습니다

●전역 범위는 기본 네임스페이스라고도 합니다

Definition:

#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;
}
네임스페이스 사용

rrreeerrreee#🎜 🎜#네임스페이스는 전역 변수 명명 충돌 문제를 해결합니다.

#🎜🎜##🎜🎜#3. 요약#🎜🎜##🎜🎜##🎜🎜##🎜🎜#C++에는 동적 메모리 할당이 내장되어 있습니다. 전용 키워드 #🎜🎜##🎜🎜# C++의 동적 메모리 할당은 동시에 초기화 가능 #🎜🎜##🎜🎜#C++의 동적 메모리 할당은 유형 기반 #🎜🎜##🎜🎜#C++ 이름 충돌 문제를 해결하기 위해 네임스페이스 개념이 사용됩니다 #🎜 🎜##🎜🎜##🎜🎜# 추천 관련 동영상 튜토리얼: "#🎜🎜#C++Tutorial#🎜🎜#"#🎜🎜##🎜🎜#위 내용은 이 글의 전체 내용이길 바랍니다. 모든 사람의 공부에 도움이 될 것입니다. 더 흥미로운 내용을 보려면 PHP 중국어 웹사이트의 관련 튜토리얼 열을 주의 깊게 살펴보세요! ! ! #🎜🎜#

위 내용은 C++의 동적 메모리 할당 및 네임스페이스 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제