도구 태그
예배 규칙서
도구 태그
C++ 동적 메모리
C++에서 동적 메모리가 작동하는 방식을 이해하는 것은 자격을 갖춘 C++ 프로그래머가 되는 데 필수적입니다. C++ 프로그램의 메모리는 두 부분으로 나뉩니다.
스택: 함수 내부에 선언된 모든 변수는 스택 메모리를 차지합니다.
힙: 프로그램에서 사용되지 않은 메모리이며 프로그램이 실행되는 동안 동적으로 메모리를 할당하는 데 사용할 수 있습니다.
정의된 변수에 특정 정보를 저장하는 데 필요한 메모리 양을 미리 예측할 수 없는 경우가 많습니다. 필요한 메모리 크기는 런타임에 결정되어야 합니다.
C++에서는 할당된 공간의 주소를 반환하는 특수 연산자를 사용하여 특정 유형의 변수에 대해 런타임 시 힙에 메모리를 할당할 수 있습니다. 이 연산자는 new 연산자입니다.
동적으로 메모리를 할당할 필요가 없다면 delete 연산자를 사용하여 이전에 new 연산자가 할당한 메모리를 삭제할 수 있습니다.
new 및 delete 연산자
다음은 new 연산자를 사용하여 모든 데이터 유형에 대해 메모리를 동적으로 할당하기 위한 일반적인 구문입니다.
new data-type;
여기에서 data-type은 배열을 포함한 모든 내장 데이터일 수 있습니다. 유형도 가능합니다. 클래스나 구조를 포함한 사용자 정의 데이터 유형이어야 합니다. 먼저 내장 데이터 유형을 살펴보겠습니다. 예를 들어, double 유형에 대한 포인터를 정의한 다음 실행 시 할당되는 메모리를 요청할 수 있습니다. 다음과 같이 new 연산자를 사용하여 이를 수행할 수 있습니다.
double* pvalue = NULL; // 初始化为 null 的指针 pvalue = new double; // 为变量请求内存
여유 저장 공간이 모두 소진된 경우 메모리 할당이 성공하지 못할 수 있습니다. 따라서 new 연산자가 NULL 포인터를 반환하는지 확인하고 다음과 같은 적절한 조치를 취하는 것이 좋습니다.
double* pvalue = NULL;
if( !(pvalue = new double ))
{
cout << "Error: out of memory." <<endl;
exit(1);
}malloc() 이 함수는 C 언어에서 나타났고 여전히 C++에도 존재하지만, 수행하지 않는 것이 좋습니다. 가능한 한 malloc() 함수를 사용하십시오. malloc() 함수와 비교하여 new의 주요 장점은 new가 메모리를 할당할 뿐만 아니라 객체도 생성한다는 것입니다.
동적으로 메모리가 할당된 변수가 더 이상 필요하지 않다고 생각되면 언제든지 아래와 같이 삭제 연산자를 사용하여 해당 변수가 차지하는 메모리를 해제할 수 있습니다.
delete pvalue; // 释放 pvalue 所指向的内存
위 내용은 다음에서 사용됩니다. new 및 delete 연산자를 사용하는 방법을 보여주는 예제 개념:
#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;
}4개의 Box 객체가 포함된 배열에 메모리를 할당하려는 경우 생성자는 4번 호출됩니다. 마찬가지로 객체가 삭제되면 소멸자도 동일한 횟수(4번) 호출됩니다.
위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.
调用构造函数! 调用构造函数! 调用构造函数! 调用构造函数! 调用析构函数! 调用析构函数! 调用析构函数! 调用析构函数!
관련 동영상
핫 AI 도구
무료로 이미지를 벗다
사진에서 옷을 제거하는 온라인 AI 도구입니다.
사실적인 누드 사진을 만들기 위한 AI 기반 앱
더 현명한 결정을 위한 AI 기반 투자 연구
인기 기사
뜨거운 주제
20450
7
13593
4
11933
4
8937
17
8479
7
인기 있는 도구
사용하기 쉬운 무료 코드 편집기
중국어 버전, 사용하기 매우 쉽습니다.
강력한 PHP 통합 개발 환경
시각적 웹 개발 도구
신 수준의 코드 편집 소프트웨어(SublimeText3)












![PHP 실용 개발 시작하기: 빠른 PHP 생성 [중소기업 포럼]](https://img.php.cn/upload/course/000/000/035/5d27fb58823dc974.jpg)
