728x90

new는 객체나 배열을 동적으로 할당할 때 사용합니다. 반대로 delete는 동적으로 할당한 메모리를 해제할 때 사용합니다.

 

new 연산자를 사용해 class 객체를 할당할 때는 메모리가 먼저 할당되고 객체의 생성자가 호출됩니다.

 

new 연산자를 이용해서 배열을 하려고 할때 첫 번째 인자를 제외한 모든 차원의 값은 양수 값을 줘야합니다. 

#include <iostream>
#include <typeinfo>

using namespace std;

int main()
{
	int arrdata = 10;
	int* p1 = new int;
	int* p2 = new int[10];
	int(*p3)[10] = new int[arrdata][10];
	// int(*p4)[10] = new int[arrdata][arrdata];	// error C2540: 배열 범위가 상수 식이 아닙니다.

	delete p1;
	delete[] p2;
	delete[] p3;
}

위의 예제처럼 new를 이용해 동적으로 메모리를 할당해 줬으면 delete를 이용해 해제해야 합니다.

주의할 점은 배열형태로 동적 생성했다면 반드시 해제도 배열 형태로 해줘야 합니다.

 

new를 이용해 동적 생성할 때 const, volatile, class, enum을 포함할 수 있습니다. 하지만 참조형은 객체가 아니기때문에 new 연산자로 동적할당 할 수 없습니다.

#include <iostream>
#include <typeinfo>

using namespace std;

enum Data{
	data1, data2
};
class cTest {
	int data;
public:
	cTest() { cout << "cTest 생성자"; }
	~cTest() { cout << "cTest 소멸자"; }
};
int main()
{
	const int* p1 = new int;
	volatile int* p2 = new int;
	cTest* p3 = new cTest;
	Data* p4 = new Data;

	delete p1;
	delete p2;
	delete p3;
	delete p4;
}

/*
실행결과
cTest 생성자cTest 소멸자
*/

 

728x90

'Programming > C++' 카테고리의 다른 글

C++ 디폴트 매개변수  (0) 2020.02.06
C++ reference value(참조형 변수)  (0) 2020.02.04
C++11 decltype  (0) 2020.01.20
C++11 auto  (0) 2020.01.14
C++ const, mutable  (0) 2020.01.10

+ Recent posts