관리 메뉴

JIE0025

[C++] 동적할당 new , 소멸 delete 본문

기타 학습/Language

[C++] 동적할당 new , 소멸 delete

Kangjieun11 2022. 5. 10. 16:16
728x90

힙 영역에서 동적 메모리 할당과 소멸에 malloc 과 free가 사용되었었다. (c언어)

 

new 와 delete는 이걸 대체한다.  (c++)

 

<malloc 과 free의 불편한점>

 

malloc(sizeof(int) * num);

free(nn);

 

1) 할당할 대상의 정보를 무조건 바이트단위로 전달

2) 반환형이 void 포인터형 >> 형변환

 

 

이를 new와 delete를 사용하면 불편한점이 사라진다. 

 

 

new 사용법 

int *ptr1 = new int;
double * ptr2 = new double;
int *arr1 = new int[3];
double * arr2 = new double[7];

 

delete 사용법

delete ptr1;
delete ptr2;
delete []arr1;
delete []arr2;

 

 

 

new와 delete를 이용한 동적할당 예시

char *makeStrAdr(int len){
	// char * str = (char*)malloc(sizeof(char)*len);
	char * str = new char[len];
    return str;
}

int main(){
	char * str = makeStrAdr(20);
    strcpy(str, "my name is jieun");
    cout << str << endl;
    
    //free(str);
    delete []str;
	return 0;
}

 

 

C++에선 new연산자를 이용해 할당된 메모리 공간도 변수로 간주한다.

포인터 연산 없이 힙영역에 접근한다는 것..! 

int * ptr = new int;
int &ref = *ptr;
ref = 20;
cout << *ptr << endl;