메모리 동적 할당 (new, delete)
메모리 동적 할당은 프로그램 실행 중에 필요한 메모리를 동적으로 할당하고 해제하는 과정을 의미합니다. 정적 할당과 달리 동적 할당은 프로그램의 특정 시점에서 필요한 만큼의 메모리를 할당하여 효율적인 자원 관리를 수행할 수 있습니다.
new 연산자
new
연산자는 메모리 할당 연산자로, 객체의 동적 할당과 생성을 동시에 수행합니다. new
로 할당된 메모리는 프로그램이 수행 중인 동안 유지되며, 필요에 따라 해제할 수 있습니다. new
연산자를 사용하여 객체를 동적으로 생성할 때, 생성자 함수가 호출되어 객체의 초기화가 이루어집니다.
예를 들어, 다음은 new
연산자를 사용하여 int
타입의 객체를 동적으로 할당하는 예입니다.
int* num = new int;
*num = 10;
위 예제에서 new int
는 int
타입을 위한 메모리 공간을 할당하고, 그 메모리 공간의 주소를 num
포인터에 저장합니다. *num = 10
은 num
포인터가 가리키는 주소에 10을 할당하는 작업을 수행합니다.
delete 연산자
delete
연산자는 new
연산자로 할당한 메모리를 해제하는데 사용됩니다. delete
로 메모리를 해제한 후에는 해당 메모리는 재사용이 불가능하며, 다른 용도로 사용하기 위해서는 다시 할당해야 합니다.
위에서 new
연산자로 할당한 메모리를 해제하는 코드는 다음과 같습니다.
delete num;
위 코드는 num
포인터가 가리키는 메모리를 해제하고 해당 메모리를 운영체제에 반환합니다.
예외 처리
메모리 동적 할당 시, 메모리 부족 등의 이유로 할당에 실패할 수 있습니다. 이 경우 new
연산자는 std::bad_alloc
예외를 던집니다. 따라서 메모리 할당에 실패했을 때, 이 예외를 처리하는 코드를 작성해야 합니다.
예를 들어, 다음은 new
연산자를 사용한 메모리 할당 예외 처리 코드입니다.
try {
int* num = new int;
} catch (std::bad_alloc& e) {
std::cout << "메모리 할당에 실패했습니다." << std::endl;
}
위 코드에서 new int
로 메모리를 할당하는 부분에서 std::bad_alloc
예외가 발생할 수 있습니다. catch
블록에서는 해당 예외를 처리하고, 메모리 할당에 실패했음을 사용자에게 알립니다.
메모리 동적 할당은 C++에서 중요한 개념 중 하나로, 복잡한 데이터 구조나 동적으로 크기가 변하는 배열 등을 구현하는 데 필수적입니다. new
, delete
연산자를 올바르게 사용하고 예외 처리를 적절하게 해주면, 안정적인 동적 메모리 할당과 해제를 수행할 수 있습니다.
댓글