본문 바로가기
카테고리 없음

메모리 동적 할당 (new, delete)

by nono22 2023. 12. 20.

메모리 동적 할당 (new, delete)

메모리 동적 할당은 프로그램 실행 중에 필요한 메모리를 동적으로 할당하고 해제하는 과정을 의미합니다. 정적 할당과 달리 동적 할당은 프로그램의 특정 시점에서 필요한 만큼의 메모리를 할당하여 효율적인 자원 관리를 수행할 수 있습니다.

new 연산자

new 연산자는 메모리 할당 연산자로, 객체의 동적 할당과 생성을 동시에 수행합니다. new로 할당된 메모리는 프로그램이 수행 중인 동안 유지되며, 필요에 따라 해제할 수 있습니다. new 연산자를 사용하여 객체를 동적으로 생성할 때, 생성자 함수가 호출되어 객체의 초기화가 이루어집니다.

예를 들어, 다음은 new 연산자를 사용하여 int 타입의 객체를 동적으로 할당하는 예입니다.

int* num = new int;
*num = 10;

위 예제에서 new intint 타입을 위한 메모리 공간을 할당하고, 그 메모리 공간의 주소를 num 포인터에 저장합니다. *num = 10num 포인터가 가리키는 주소에 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 연산자를 올바르게 사용하고 예외 처리를 적절하게 해주면, 안정적인 동적 메모리 할당과 해제를 수행할 수 있습니다.

댓글