본문 바로가기
C & C++/윤성우의 열혈 C++ 프로그래밍

[열혈 C++] malloc & free를 대신하는 new & delete

by 거북이 코딩 2024. 1. 24.

new & delete

 

 new & delete는 C++에서 동적할당을 하기 위해 사용합니다. malloc & free와 달리 인자를 바이트 크기대로 전달할 필요가 없고 형 변환도 필요 없다는 장점이 있습니다.

데이터형 * 포인터이름=new 데이터형;
데이터형 * 포인터이름=new 데이터형[배열의길이];    //배열의 경우

 

delete 포인터이름;
delete []포인터이름;    //배열의 경우

 

그럼 new & delete를 사용하는 간단한 예제를 작성해 보겠습니다.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;

int main() {
	int len;
	cout << "문자열의 길이를 입력하세요" << endl;
	cin >> len;
	char* ptr = new char[len];
	cout << "문자열을 입력하세요" << endl;
	cin >> ptr;
	cout << "당신이 입력한 문자열은 \"" << ptr << "\" 입니다" << endl;
	delete []ptr;
	return 0;
}
문자열의 길이를 입력하세요
20
문자열을 입력하세요
안녕하세요
당신이 입력한 문자열은 "안녕하세요" 입니다

 

참조자로 힙 영역 접근하기

 

 참조자를 이용하면 동적할당한 힙 영역에 접근할 수 있습니다. 참조자를 이용하면 좀 더 간결한 형태로 작성할 수 있고 값을 변경할 수도 있습니다.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;

int main() {
	int* ptr = new int;
	int& ref = *ptr;
	ref = 10;
	cout << *ptr;
	delete ptr;
	return 0;
}

 

C++에서 C 표준함수 호출하기

 

 C++에서도 C에서 쓰던 string.h, math.h 등의 헤더를 사용할 수 있습니다. 하지만 C++을 위해 개정해 놓은 헤더가 있으니 가급적 C++헤더를 사용하는 게 좋습니다. 왜냐하면 C++ 헤더는 C에서는 안되는 함수 오버로딩 등을 사용하여 C++문법을 기반으로 개선되어 있기 때문입니다. C의 헤더에서 ". h"를 지우고 앞에 "c"를 붙이면 C++헤더가 됩니다. 예를 들면 <string.h>는 <cstring>으로 대체할 수 있습니다.