최고의 C ++ 동적 메모리 튜토리얼 2024년, 이 튜토리얼에서는 신규 및 삭제 사업자,동적 메모리의 할당 배열,동적 메모리 할당 개체,를 배울 수 있습니다.
C는이 작품 ++ 필수 프로그래머 자격을 갖춘 C가 될 것입니다 어떻게 ++에서 동적 메모리를 이해합니다. C ++ 프로그램 메모리는 두 부분으로 나누어 져 있습니다 :
많은 메모리가 실행시 필요한 메모리의 크기를 결정하는 데 필요한 특정 정보에 정의 된 변수를 저장하는 데 필요한 횟수가 사전에 예측할 수있다.
C ++에서, 그것은 할당 된 어드레스 공간을 반환 특별한 연산자 런타임 힙 메모리에서의 소정 유형의 변수에 할당 할 수 있습니다. 이 연산자는새로운 운영자되고 있습니다.
동적 메모리를 할당 할 필요가없는 경우, 당신은 할당 된 메모리 전에 새 운영자에 의해 삭제delete 연산자를 사용할 수 있습니다.
여기에 메모리의 데이터 유형 동적 할당의 일반 구문 될 수있는 새로운 연산자는 다음과 같습니다
new data-type;
여기서, 데이터 타입은 사용자 정의를 포함하는 클래스 또는 구조를 포함하는 데이터의 임의의 유형이 될 수있는 내장 된 어레이를 포함하는 데이터 타입 일 수있다.우리가 먼저 내장 데이터 유형을 살펴 보자. 예를 들어, 우리는 그 메모리가 실행 시간에 할당되며, 메모리를 요청 유형의 이중 포인터의 포인터를 정의 할 수있다. 우리는 이러한 목표를 달성하기 위해 다음과 같은 성명에 따라새로운 연산자를 사용할 수 있습니다 :
double* pvalue = NULL; // 初始化为 null 的指针 pvalue = new double; // 为变量请求内存
무료 저장 영역이 소진 된 경우, 성공적으로 메모리를 할당 할 수 있습니다. 새로운 운영자가 NULL 포인터를 반환 여부를 확인하고 다음을 적절한 조치를 취하는 것이 좋습니다 :
double* pvalue = NULL; if( !(pvalue = new double )) { cout << "Error: out of memory." <<endl; exit(1); }
C언어에서의 malloc () 함수는 C ++ 여전히 존재 등장 있지만의 malloc () 함수를 사용하지 않는 것을 추천한다.주요 장점에 비해 신규의 malloc () 함수는 새로운 메모리를 할당 할 것을, 또한 객체를 만들었다.
언제든지 할 때 동적 변수 이미 할당 된 메모리가 더 이상 필요하다는 것을 느낄 다음과 같이, 당신은 그것을 사용하는 메모리를 해제하려면 delete 연산자를 사용할 수 있습니다 :
delete pvalue; // 释放 pvalue 所指向的内存
위의 개념에서 사용 다음 예는 새를 사용하고 연산자를 삭제하는 방법을 보여줍니다
#include <iostream> using namespace std; int main () { double* pvalue = NULL; // 初始化为 null 的指针 pvalue = new double; // 为变量请求内存 *pvalue = 29494.99; // 在分配的地址存储值 cout << "Value of pvalue : " << *pvalue << endl; delete pvalue; // 释放内存 return 0; }
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
Value of pvalue : 29495
우리는 다음과 같은 문자 배열 (20 자 문자열), 우리는 동적으로 메모리를 할당 할 배열 구문 위의 예제를 사용하여 메모리를 할당한다고 가정 :
char* pvalue = NULL; // 初始化为 null 的指针 pvalue = new char[20]; // 为变量请求内存
다음과 같이 우리가 방금 만든 배열을 삭제하려면 문은 다음과 같습니다
delete [] pvalue; // 删除 pvalue 所指向的数组
다음과 같이 여기에 다차원 배열을위한 메모리를 할당 할 수있는 일반 구문 new 연산자는 다음과 같습니다
int ROW = 2; int COL = 3; double **pvalue = new double* [ROW]; // 为行分配内存 // 为列分配内存 for(int i = 0; i < COL; i++) { pvalue[i] = new double[COL]; }
다차원 배열의 메모리를 해제 :
for(int i = 0; i < COL; i++) { delete[] pvalue[i]; } delete [] pvalue;
목적은 단순 데이터 유형과 다르지 않다. 예를 들어, 다음 코드를 고려, 우리는이 개념을 명확히하기 위해 객체의 배열을 사용합니다 :
#include <iostream> using namespace std; class Box { public: Box() { cout << "调用构造函数!" <<endl; } ~Box() { cout << "调用析构函数!" <<endl; } }; int main( ) { Box* myBoxArray = new Box[4]; delete [] myBoxArray; // Delete array return 0; }
만약 박스가 네 개의 객체가 메모리 어레이를 할당 포함 할 경우, 생성자는 이러한 객체를 삭제할 때와 동일한 방식으로, 소멸자 동일한 횟수 (네 번)를 호출 할 것이며, 네 번 호출한다.
상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를
调用构造函数! 调用构造函数! 调用构造函数! 调用构造函数! 调用析构函数! 调用析构函数! 调用析构函数! 调用析构函数!