메모리 관리: 예
이 문서에서는 MFC가 일반적인 세 종류의 메모리 할당 각각에 대해 프레임 할당 및 힙 할당을 수행하는 방법을 설명합니다.
바이트 배열 할당
프레임에 바이트 배열을 할당하려면
다음 코드와 같이 배열을 정의합니다. 배열 변수가 범위를 종료하면 배열이 자동으로 삭제되고 해당 메모리가 회수됩니다.
{ const int BUFF_SIZE = 128; // Allocate on the frame char myCharArray[BUFF_SIZE]; int myIntArray[BUFF_SIZE]; // Reclaimed when exiting scope }
힙에 바이트 배열(또는 기본 데이터 형식)을 할당하려면
이 예제에
new
표시된 배열 구문과 함께 연산자를 사용합니다.const int BUFF_SIZE = 128; // Allocate on the heap char* myCharArray = new char[BUFF_SIZE]; int* myIntArray = new int[BUFF_SIZE];
힙에서 배열의 할당을 취소하려면
다음과 같이 연산자를
delete
사용합니다.delete[] myCharArray; delete[] myIntArray;
데이터 구조 할당
프레임에 데이터 구조를 할당하려면
다음과 같이 구조 변수를 정의합니다.
struct MyStructType { int topScore; }; void MyFunc() { // Frame allocation MyStructType myStruct; // Use the struct myStruct.topScore = 297; // Reclaimed when exiting scope }
구조체가 차지하는 메모리는 범위를 종료할 때 회수됩니다.
힙에 데이터 구조를 할당하려면
다음 예제와 같이 힙에 데이터 구조를 할당하고
delete
할당을 취소하는 데 사용합니다new
.// Heap allocation MyStructType* myStruct = new MyStructType; // Use the struct through the pointer ... myStruct->topScore = 297; delete myStruct;
개체 할당
프레임에 개체를 할당하려면
다음과 같이 개체를 선언합니다.
{ CMyClass myClass; // Automatic constructor call here myClass.SomeMemberFunction(); // Use the object }
개체의 소멸자가 개체의 범위를 종료하면 자동으로 호출됩니다.
힙에 개체를 할당하려면
개체에
new
대한 포인터를 반환하는 연산자를 사용하여 힙에 개체를 할당합니다. 연산자를delete
사용하여 삭제합니다.다음 힙 및 프레임 예제에서는 생성자가 인수를
CPerson
사용하지 않는다고 가정합니다.// Automatic constructor call here CMyClass* myClass = new CMyClass; myClass->SomeMemberFunction(); // Use the object delete myClass; // Destructor invoked during delete
생성자에 대한 인수가
CPerson
포인터char
인 경우 프레임 할당에 대한 문은 다음과 같습니다.CMyClass myClass("Joe Smith");
힙 할당에 대한 문은 다음과 같습니다.
CMyClass* myClass = new CMyClass("Joe Smith");