fullstack

[C++] 생성자(Constructor)와 소멸자(Destructor)

Language/C++

- 생성자 (Constructor)


생성자는 객체를 생성과 동시에 초기화 할 수 있는 메커니즘이다.

모든 객체는 생성이 되면 메모리를 할당받고 생성자를 호출하게 된다.

생성자는 함수이고 ,클래스의 이름과 같은 이름을 지니며, 리턴이 없다.



1
2
3
4
5
6
class AAA
{
    int num;
public:
    AAA()    { num = 10; }
};



위와 같이 생성자를 이용하여 객체의 멤버변수를 초기화 할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
class AAA
{
    int num;
public:
    AAA(int n) { num = n; }
};
 
int main()
{
    AAA a(10);
 
    return 0;
}



또한 위와 같이 매개변수를 이용하여 초기화 할 수 있으며 오버로딩도 가능하다.




- 소멸자 (Destructor)


경우에 따라 객체가 소멸되기 전에 처리해야 할 작업이 있을 수 있다. (예를 들어 객체안에서 동적할당을 사용한 경우 메모리 해제)

소멸자는 그러한 일들을 처리하기 위한 메커니즘이다.

모든 객체는 소멸자를 호출하고 메모리 반환후 소멸하게 된다.

소멸자는 함수이고, 클래스의 이름 앞에 ~가 붙은 형태의 이름을 가지며, 리턴이 없다. 또한 생성자와 다르게 매개변수를 받을 수 없다.


1
2
3
4
5
6
7
class AAA
{
    int *arr;
public:
    AAA(int size) { arr = new int[size]; }
    ~AAA() { delete []arr; }
};



위와 같이 소멸자를 이용하여 동적할당받은 메모리를 해제해 줄 수 있다.




- 디폴트 생성자 , 디폴트 소멸자


생성자와 소멸자는 따로 정의하지 않으면 디폴트 생성자와 디폴트 소멸자가 자동으로 삽입되며, 둘은 아무런 일도 하지 않는다.

자동으로 삽입된 디폴트 생성자와 디폴트 소멸자는 아래와 같다.


1
2
3
4
5
6
7
class AAA
{
    int num;
public:
    AAA() {}
    ~AAA() {}
};



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

[C++] friend 선언  (0) 2015.12.02
[C++] this 포인터  (0) 2015.12.02
[C++] 캡슐화 (EnCapsulation)  (0) 2015.11.30
[C++] 정보은닉 (Information Hiding)  (0) 2015.11.30
[C++] 동적할당. new와 delete  (0) 2015.11.30