English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 문서에서는 new와 delete 연산자를 사용하여 C++에서 메모리 관리를 배울 것입니다. ++에서 효과적으로 메모리를 관리합니다.
배열여러 동일한 유형의 데이터를 저장할 수 있지만, 배열 사용에는 심각한 단점이 있습니다.
배열을 사용할 수 있지만, 배열 사용에는 심각한 단점이 있습니다.
배열을 선언할 때 메모리를 할당해야 하지만, 대부분의 경우 실행 시에야 정확한 필요 메모리를 알 수 있습니다.
이 경우 가장 좋은 방법은 최대 가능한 필요 메모리를 가진 배열을 선언하는 것입니다(예상 가능한 최대 크기를 가진 배열을 선언합니다).
불리한 점은 사용되지 않은 메모리가 낭비되어 다른 프로그램에 사용할 수 없다는 점입니다. ++메모리를 낭비하지 않기 위해 C
new와 delete 연산자를 사용하여 실행 시 필요한 메모리를 동적으로 할당합니다.++c
#include <iostream> 프로그램은 사용자가 입력한 학생 수 n개의 성적을 저장하고 표시합니다. using namespace std; #include <cstring> { int num; cout << "학생 총 수를 입력하세요: "; cin >> num; float* ptr; // int main() ptr = new float[num]; cout << "학생의 성적을 입력하세요." << endl; for (int i = 0; i < num; ++i) { cout << "학생" << i + 1 << " : "; cin >> *(ptr + i); } cout << "\n학생의 성적을 표시합니다." << endl; for (int i = 0; i < num; ++i) { cout << "학생" << i + 1 << " : " << *(ptr + i) << endl; } // 메모리에 할당된 부동형 수 이 표현식은 메모리를 해제하여 운영 체제에 반환합니다. return 0; }
ptr 메모리가 해제되었습니다
출력 결과 5 학생 총 수를 입력하세요: 001학생 295 002학생 485 003학생 650 004학생 7학생의 성적을 표시합니다。 005학생 540 학생의 성적을 입력하세요。 001 학생295 002 학생485 003 학생650 004 학생7학생의 성적을 표시합니다。 005 학생540
:
ptr = new float[num];
new 연산자위 프로그램의 표현식은 메모리 부분을 가리키는 포인터를 반환합니다.포인터
delete 연산자
new 연산자로 메모리를 할당한 후, 운영 체제에 반환해야 합니다.
프로그램이 new로 많은 메모리를 사용하면 운영 체제가 사용할 수 있는 메모리가 없어 시스템이 충돌할 수 있습니다.
이 표현식은 메모리를 해제하여 운영 체제에 반환합니다.
delete [] ptr;
방括号[]를 사용하여 배열이 제거되었습니다. 단일 객체를 제거할 경우 방括号을 사용하지 않습니다. 예를 들어:
C ++内存管理위 프로그램을 객체 지향적으로 처리하는 방법입니다.
#include <iostream> using namespace std; class Test { private: int num; float *ptr; public: Test() { cout << "학생 총 수를 입력하세요: "; cin >> num; ptr = new float[num]; cout << "학생의 성적을 입력하세요." << endl; for (int i = 0; i < num; ++i) { cout << "학생" << i + 1 << " : "; cin >> *(ptr + i); } } ~Test() { delete[] ptr; } void Display() { cout << "\n학생의 성적을 표시합니다." << endl; for (int i = 0; i < num; ++i) { cout << "학생" << i+1 << " : " << *(ptr + i) << endl; } } }; int main() { Test s; s.Display(); return 0; }
이 프로그램의 출력은 위의 프로그램의 출력 결과와 동일합니다.
객체 s를 생성할 때, 생성자가 호출되며, 생성자는 num 개의 부동소수점 데이터에 메모리를 할당합니다.
객체가 파괴될 때, 즉, 객체가 범위를 벗어날 때, 자동으로 디스트럭터 함수가 호출됩니다.
~Test() { delete[] ptr; }
이 디스트럭터 함수는 delete[] ptr;를 실행하고 메모리를 운영 체제에 반환합니다.