동적 메모리

동적 메모리 할당

new로 확보한 객체는 delete로 해제해야 하며, 이 책임을 놓치면 누수와 댕글링 포인터가 생깁니다.

할당

힙 영역에 객체 생성

new는 필요한 공간을 확보하고 생성자를 실행한 뒤 주소를 돌려줍니다.

new int{3}
해제

사용이 끝난 공간 반환

delete는 소멸자를 실행하고 메모리를 반환하므로 정확히 한 번 호출되어야 합니다.

delete p
실패

공간 확보가 안 될 수 있음

메모리가 부족하면 예외가 발생할 수 있어 실패 경로를 고려해야 합니다.

std::bad_alloc
위험

누수와 댕글링

해제를 잊으면 누수, 해제 뒤 사용하면 정의되지 않은 동작으로 이어집니다.

leak / dangling
소유자누가 delete를 호출할 책임이 있는지 코드에서 분명해야 합니다.
배열new[]로 얻은 메모리는 delete[]로 해제해야 짝이 맞습니다.
대안크기가 변하는 묶음은 std::vector, 단일 소유권은 std::unique_ptr을 우선 고려합니다.