LANG/C++

[C++]02-5.malloc & free를 대신하는 new &delete

혀니리리 2023. 5. 11. 23:29
728x90

C언어의 동적할당의 단점:

1.할당할 대상의 정보를 무조건 바이트 크기단위로 전달해야 함

2.반환형이 void 형 포인터이기 때문에 적절한 형변환을 거쳐야 함

 

C++에서의 new, delete: 위의 단점을 보완해줌

-int형 변수의 할당 : int * ptr = new int;

-double형 변수의 할당 : double * ptr2 = new double;

-길이가 3인 int형 배열의 할당 : int * arr1 = new int[3];

-길이가 7인 double형 배열의 할당 : double * arr2 = new double[7];

 

-앞서 할당한 int형 변수의 소멸 : delete ptr1;

-앞서 할당한 double형 변수의 소멸 : delete ptr2;

-앞서 할당한 int형 배열의 소멸: delete []arr1;

-앞서 할당한 double형 배열의 소멸 : delete []arr2;

 

 

=>동적할당이 훨씬 간결해졌음을 알 수 있음.

 

이제 C++에서 malloc, free는 쓰지 않기로..

 

1.힙에 할당된 변수? 이제 포인터를 사용하지 않아도 접근할 수 있어요.

int *ptr = new int;
int &ref = *ptr; //힙 영역에 할당된 변수에 대한 참조자 선언
ref = 20;
cout << *ptr << endl; // 출력결과는 20!

참조자 선언은 상수가 아닌 변수를 대상으로 함.

C++에선 메모리 공간도 변수로 간주하기 때문에 참조자 선언 가능.

 

윤성우의 C++ p.96 정답

구조체 선언 시에는 *붙여서 포인터형태로 갖고가야 한다는것 잊지 말기

그리고 내부 요소 접근할 때는 왼쪽 항에서는 p1->xpos , 오른쪽 항이나 값 표현 시에는 p3.xpos

728x90