malloc & free를 대신하는 new & delete
먼저 C언어의 malloc & free를 이용한 동적할당을 아래 코드로 살펴보자.
#include <iostream> #include <string.h> #include <stdlib.h> #pragma warning(disable: 4996) using namespace std; char * MakeStrAdr(int len) { char * str = (char *)malloc(sizeof(char) * len); return str; } int main(void) { char * str = MakeStrAdr(20); strcpy(str, "I am so happy~"); cout << str << endl; free(str); return 0; }
C언어의 동적할당은 두 가지 불편한 사항이 있다.
- 할당한 대상의 정보를 무조건 바이트 크기단위로 전달해야 한다.
- 반환형이 void형 포인터이기 때문에 적절한 형 변환을 거쳐야 한다.
그런데 C++에서 제공하는 키워드 new와 delete를 사용하면 이러한 불편한 점이 사라진다.
new는 malloc함수를 대신하는 키워드이고,
delete는 free함수를 대신하는 키워드이다.
- int형 변수의 할당 int * ptr1 = new int;
- double형 변수의 할당 double * ptr2 = new double;
- 길이가 3인 int형 배열 할당 int * arr1 = new int[3];
- 길이가 7인 double형 배열 할당 double * arr2 = new double[7];
문장이 의미하는 바가 쉽게 이해될 것이다. 이어서 free함수를 대신하는 키워드 delete의 사용방법을 정리해보겠다.
- 앞서 할당한 int형 변수의 소멸 delete ptr1;
- 앞서 할당한 double형 변수 소멸 delete ptr2;
- 앞서 할당한 int형 배열의 소멸 delete []arr1;
- 앞서 할당한 double형 배열의 소별 delete []arr2;
앞서 보인 예제를 new와 delete로 변경하여 사용해보겠다.
#include <iostream> #include <string.h> #pragma warning(disable: 4996) using namespace std; char * MakeStrAdr(int len) { //char * str = (char *)malloc(sizeof(char) * len); char * str = new char[len]; return str; } int main(void) { char * str = MakeStrAdr(20); strcpy(str, "I am so happy~"); cout << str << endl; //free(str); delete[]str; return 0; }
윤성우 저 열혈강의 C++프로그래밍 참조
'Learn business > C++' 카테고리의 다른 글
[C++]포인터와 배열3 (1) | 2016.12.07 |
---|---|
[C++]포인터와 배열2 (0) | 2016.12.06 |
[C++]포인터와 배열1 (1) | 2016.12.06 |
[C++]포인터 (0) | 2016.12.04 |