반응형
Notice
Recent Posts
Recent Comments
Link
Brise
[C++ 기본 4] 1. 가상소멸자 본문
반응형
대부분의 C++ 프로그램에서는 객체를 핸들링하기 위해서 객체 포인터를 주로 사용하며, 파생클래스와 기반클래스 객체들을 일괄로 다루기 위해 기반클래스 포인터를 사용한다.
만약, 기반클래스 포인터를 이용하여 객체를 핸들링할 때, 객체의 소멸자가 가상함수가 아니라면 파생클래스를 소멸시킬 때 기반클래스의 포인터를 이용하여 소멸시키기 때문에 기반클래스의 소멸자가 불려 비정상적으로 객체를 소멸시키게 된다.
때문에 클래스의 소멸자는 가상함수(virtual function)이어야만 한다.
// 1_가상소멸자 149 page
#include <iostream>
// 핵심 : 모든 기반 클래스의 소멸자는 반드시 가상함수 이어야 한다.
class Base
{
public:
virtual ~Base() {} // 기반 클래스의 소멸자가 가상이면
// 모든 파생클래스의 소멸자는 가상함수이다
};
class Derived : public Base
{
public:
Derived() { std::cout << "자원할당" << std::endl; }
virtual ~Derived() { std::cout << "자원해지" << std::endl; }
};
int main()
{
Base* p = new Derived; // 기반 클래스포인터 = &파생클래스
delete p;
}
반응형
'프로그램 > C,C++' 카테고리의 다른 글
타이머 prescale, period 찾는 프로그램 (0) | 2024.06.06 |
---|---|
[C++ 기본 4] 2. 추상클래스 (0) | 2022.05.17 |
[C++ 기본3] 8. mangling (0) | 2022.05.15 |
[C++ 기본3] 7. 가상함수 (0) | 2022.05.15 |
[C++ 기본3] 6. Upcasting (0) | 2022.05.15 |
[C++ 기본3] 5. 상속 (0) | 2022.05.15 |
[C++ 기본3] 4. 상수멤버함수 (0) | 2022.05.15 |
Comments