Learn business/C++

[C++]new & delete


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