샘플 코드를 만들어 실험을 해보자.
Base 클래스와 Derived 클래스 정의
class Base {
private:
    int val;
public:
    Base(int n) : val(n) {
        cout << "Base(int)" << endl;
    }
    Base() {
        cout << "Base()" << endl;
    }
    ~Base() {
        cout << "~Base()" << endl;
    }
};
class Derived : public Base {
private:
    int derivedVal;
public:
    Derived(int n) : derivedVal(n) {
        cout << "Derived(int)" << endl;
    }
    Derived() {
        cout << "Derived()" << endl;
    }
    ~Derived() {
        cout << "~Derived()" << endl;
    }
};Case 1
Derived d(5);Base()
Derived(int)
~Derived()
~Base()
Derived 클래스가 생성될 때는 Base 클래스의 생성자가 먼저 호출된다.
소멸은 생성 순서의 반대
Base(int) 생성자를 활용하지 않으면 default는 Base() 생성자가 호출된다.
Case 2
Base* d = new Derived(5);
delete d;Base()
Derived(int)
~Base()
Derived 포인터의 반환을 Base 포인터에 담을 경우
Derived 생성자는 호출되지만, 소멸자는 호출되지 않는다.
Derived 생성자가 호출되면서 Based 생성자가 먼저 호출 됨.
'아카이빙 > C, C++' 카테고리의 다른 글
| 가상함수(Virtual function)의 동작원리 (0) | 2018.05.27 | 
|---|---|
| malloc과 new의 차이 (0) | 2018.05.27 | 
| struct와 class 차이 (0) | 2018.05.27 | 
| strcpy와 strncpy (0) | 2018.05.27 | 
| string과 character 배열 (0) | 2018.05.26 |