C++의 메모리 동적 할당은 C의 그것에 비해 훨씬 간편하다
C의 경우 malloc 함수를 호출할 때 매개변수로 메모리의 크기부터 형까지 모든 것들을 C에 알려주었어야 했는데,
C++에서는 단순히 new 연산자를 이용해 메모리를 동적 할당하고, delete 연산자로 메모리 할당을 해제하면 된다.
아래 코드를 보자
개별 인스턴스의 new, delete 연산자
int main(void)
{
int* pData = new int;
int* pNewData = new int(10);
*pData = 1000;
std::cout << *pData << std::endl;
std::cout << *pNewData << std::endl;
delete pData;
delete pNewData;
return 0;
}
new 연산자를 이용해 메모리를 동적할당한다. new 연산자로 메모리 동적할당을 하면 C++의 추론에 의해 heap 영역에 개별 int 만큼의 메모리가 할당 된다.
delete 연산자를 이용해 동적할당된 메모리를 해제할 수 있다. 이 역시 C++의 자동추론에 의해 heap영역에 int만큼 할당되었던 메모리가 할당 해제된다.
배열 인스턴스의 new, delete 연산자
int main(void)
{
int* pArr = new int[5];
for (int i = 0; i < 5; i++)
pArr[i] = (i + 1) * 10;
for (int i = 0; i < 5; i++)
std::cout << pArr[i] << std::endl;
delete[] pArr // delete 연산자에 배열임을 알려줘야 한다.
return 0;
}
배열 인스턴스의 메모리 동적 할당 및 해제도 정말 간단하다. 개별 인스턴스의 메모리 동적 할당 및 해제와 거의 비슷하다.
단 배열이 몇개의 자료형으로 구성되어있는지는 알려주어야 하며,
해제할때도 현재 해제하는 인스턴스가 배열인 것 정도는 알려주어야 한다.
만약 삭제할 인스턴스가 배열임에도 불구하고, delete 연산자에 배열을 삭제한다고 명시해주지 않으면 메모리 할당을 해제할 때 배열의 첫번째 요소의 메모리만 해제된다. 즉 4개는 메모리에 남게된다.
'C, C++' 카테고리의 다른 글
C++) 임시 객체와 r-value 참조 (0) | 2024.01.19 |
---|---|
C++) 참조형 (변하지 않는 포인터) (0) | 2024.01.18 |
C++) 변수 선언 및 정의 (0) | 2024.01.17 |
C++) 리다이렉션 연산자 및 std::cout (콘솔 출력) (0) | 2024.01.17 |
C++) Hello world (0) | 2024.01.17 |