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 |