[ C++ ] malloc & free를 대신하는 new & delete

반영서·2023년 1월 1일

C / C++

목록 보기
3/5
post-thumbnail

[ C++ ] malloc & free를 대신하는 new & delete

C에서 힙 메모리에 동적 할당 및 소멸에 사용했던 malloc과 free 함수가 있었다.

C++ 에서는 이를 대신해 new 와 delete 연산자가 새롭게 등장했다.(malloc과 free는 그대로 사용 가능)

#include <cstring>
#include <cstdlib>
#include <cstdio>

char * MakeStrAdr(int len)
{
	char *str = (char*)malloc(sizeof(char) * len);
	return str;
}

int main(void)
{
	char *str = MakeStrAdr(20);
	strcpy(str, "so happy");
	printf("%s", str);
	free(str);
	return 0;
}

이와 같이, C 언어에서는 malloc과 free 함수를 통해 동적할당을 할 수 있었는데, 이 방법에는 두 가지의 불편사항이 있었다.

  • 할당할 대상의 정보를 무조건 바이트 단위로 전달해야 한다.
  • 반환형이 void형 포인터이기 때문에, 적절한 캐스팅을 거쳐야 한다.

이를 개선하여 C++에서 새롭게 등장한 것이 앞서 말한 new 와 delete 연산자이다.

사용법은 다음과 같다.

int *ptr1 = new int;                // int형 변수의 할당
double *ptr2 = new double;          // double형 변수의 할당
int *arr1 = new int[3];             // 길이가 3인 int형 배열의 할당

delete ptr1;                        // 앞서 할당한 int형 변수의 소멸
delete ptr2;                        // 앞서 할당한 double형 변수의 소멸
delete []arr1;                      // 앞서 할당한 int형 배열의 소멸


다만, 객체(class)의 생성에는 반드시 new와 delete를 이용해야 한다.

profile
커지고 싶은 신입개발자

0개의 댓글