https://blog.naver.com/songsite123/223044574844
위 포스팅에서 C 언어를 통해 메모리의 동적할당 법에 대해 배워봤습니다. C는 malloc() 함수나 realloc(), calloc() 함수 등을 이용해 메모리 동적할당을 하고, free() 함수를 통해 메모리 공간을 해제합니다.
그러나 C++ 에서는 조금 다른 new 연산자와 delete 연산자를 통해 동적할당을 진행합니다. 간단히 동적할당이란 무엇인가에 대해 복습해보고, new 연산자와 delete 연산자를 통한 C++ 에서의 동적할당에 대해 알아보겠습니다.
메모리 동적 할당(Dynamic allocation)
데이터 영역과 스택 영역에 할당된느 메모리의 크기는 컴파일 타임(Compile time)에 미리 결정됩니다. 그러나 힙 영역의 크기는 프로그램이 실행 도중인 런 타임(Run time) 에 사용자가 직접 결정합니다. 런 타임에 메모리를 할당 받는 것을 메모리의 동적 할당 이라고 합니다.
포인터의 가장 큰 목적이 런 타임에 이름 없는 메모리를 할당 받아 포인터에 할당하여, 할당받은 메모리에 접근하는 것입니다. C++ 에서도 C 언어의 라이브러리 함수를 통해 동적할당을 할 수 있지만 더욱 효과적인 new 연산자와 delete 연산자를 제공합니다.
new 연산자
C언어에서의 malloc() 함수 같은 역할을 하는 new 연산자의 사용 문법입니다.
타입* 포인터이름 = new 타입;
첫 번째 타입은 데이터에 맞는 포인터를 선언하기 위해, 두 번째 타입은 메모리의 종류를 지정하기 위해 사용됩니다.
만약 사용할 수 있는 메모리가 부족하여 새로운 메모리를 만드는데 실패하면 NULL 포인터를 반환합니다.
new 연산자는 자유 기억 공간(free store) 라 불리는 메모리 공간에 객체를 위한 메모리를 할당받습니다.
또한, new 를 통해 할당받은 메모리는 따로 이름이 없으므로 해당 포인터로만 접근할 수 있습니다.
delete 연산자
C 언어에서의 free() 함수 역할을 하는 연산자입니다. C++ 에서는 더 사용하지 않는 메모리를 다시 메모리 공간에 돌려줄 때 delete 연산자를 사용합니다.
delete 포인터이름;
간단한 예제 코드로 new 와 free 를 사용해 데이터를 출력해주고 다시 해제하는 코드입니다.
사용 주의점으로는
new 연산자를 통해 생성한 메모리가 아닌 변수를 선언하여 생성한 메모리는 delete 연산자로 해제할 수 없습니다. delete 연산자는 반드시 new 연산자를 통해 할당된 메모리를 해제할 때만 사용해야 하고, 한 번 해제한 메모리를 다시 해제하려고 하면 오류가 발생합니다. 또한 다 사용했으면 delete 연산자를 까먹지 말고 사용해줘서 메모리 누수를 막아야 겠죠?
여기까지 간단하게 C++에서 new 연산자와 delete 연산자를 통해 동적할당 / 해제 하는 법에 대해 알아보았습니다. 감사합니다.
'C++ > C++ 기초' 카테고리의 다른 글
[C++] 함수 오버로딩 ( Function overloading ) (0) | 2023.05.04 |
---|---|
[C++] String 클래스 / 메소드 (0) | 2023.05.04 |
[C++] 배열, 구조체, 포인터 [Array, Structure, Pointer] (0) | 2023.05.04 |
[C++] 연산자 총 정리 (Operator) (0) | 2023.05.04 |
[C++] 리터럴 상수와 심볼릭 상수 ( literal constant and symbolic constant ) (0) | 2023.05.04 |