new
객체 생성 방법
c++에서는 객체를 생성하는 방법이 두가지이다. 스택에 생성하는 방법과 힙에 생성하는 방법이 있는데 이들의 차이는 클래스의 생성자와 소멸자를 통해 알 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class Number
{
private :
int val;
public :
Number( int val );
~Number( void );
void print_val( void );
};
Number::Number( int val )
{
this->val = val;
}
Number::~Number( void )
{
std::cout << "destroyed: " << this->val << std::endl;
}
void Number::print_val( void )
{
std::cout << "val: " << this->val << std::endl;
}
Number *test_heap( void )
{
Number *num;
num = new Number(20);
num->print_val();
return (num);
}
void test_stack( void )
{
Number num(10);
num.print_val();
}
int main( void )
{
Number *num_heap;
num_heap = test_heap();
test_stack();
delete num_heap;
return (0);
}
/* output
val: 20
val: 10
destroyed: 10
destroyed: 20
*/
test_stack함수에서 생성된 인스턴스는 함수가 종료되며 자동으로 해제된다.test_heap함수에서new키워드로 생성된 인스턴스는delete키워드로 해제하기 전까지 메모리에 유지된다.
만약에 객체 배열을 동적 할당한다면 delete []로 해제한다.
1
2
Number* nums = new Number [5];
delete [] nums;
객체 생성의 두가지 방법과 차이 객체 배열과 동적 할당이란