New / Delete 동적 할당
기존의 malloc, calloc 과 같은 힙에 동적으로 할당할 수 있는 문법이다.
C++에서 추가된 Class에 대한 개념을 사용할 때 Class를 동적으로 할당 하기 위해선 New/Delete를 써야한다.
char *MakeStr(int len) { char *str = (char*)malloc(len*sizeof(char)); return str; } int main() { char *str = MakeStr(20); strcpy(str,"Test"); std::cout << str << std::endl; free(str); return 0; }
기존엔 위와 같이 malloc이나 calloc를 이용해 원하는 크기만큼 할당해 원하는 포인터형으로 변환하여 사용한다.
하지만 New/Delete는 다르다.
char *MakeStr(int len) { char *str = new char[len]; return str; } int main() { char *str = MakeStr(20); strcpy(str,"Test"); std::cout << str << std::endl; delete[]str; return 0; }
new 자료형[길이] 이와 같이 선언하면 해당 자료형 포인터를 반환한다.
사용후 delete []str (배열이 아닌경우 delete str)로 지워줄 수 있다.
Tip
참조(Reference)를 통해서 포인터를 사용하지 않고 힙의 할당된 데이터에 접근 할 수 있다.
int *ptr = new ptr;
int &ref = *ptr;
ref = 20;
std::cout<<*ptr;
–output–
20