반응형
class A
{
public:
virtual void print() final { cout << "A" << endl; }
};
이렇게 final을 해주면 밑에서 override를 해주지 못하도록 막아버리는 것입니다. 이렇게 뒤면 밑에 override하는 것들이 다 막히는 것을 볼 수 있습니다.
가상소멸
#include <iostream>
using namespace std;
class Base
{
public:
~Base()
{
cout << "~Base()" << endl;
}
};
class Derived : public Base
{
private:
int* m_array;
public:
Derived(int length)
{
m_array = new int[length];
}
~Derived()
{
cout << "~Derived" << endl;
delete[] m_array;
}
};
int main()
{
Derived* derived = new Derived(5);
Base* base = derived;
delete base;
return 0;
}
이렇게 할경우 메모리 누수가 발생하게 됩니다. Derived를 소멸자 작업을 하지 않았기 때문인데요.
class Base
{
public:
virtual ~Base()
{
cout << "~Base()" << endl;
}
};
여기서 ~Base를 virtual로 만들어주면 정상적으로 자식 소멸자가 실행되고 부모클래스가 실행이 되는 것을 볼 수 있습니다.
반응형
'IT 프로그래밍 > C++' 카테고리의 다른 글
[c++] 순수 가상 함수, 추상 기본 클래스, 인터페이스 클래스 (0) | 2024.05.28 |
---|---|
[c++] virtual 함수 (0) | 2024.05.28 |
[c++] 상속받은 함수를 오버라이딩 하기 (0) | 2024.05.27 |
[c++] 따배시 상속과 접근 지정자 (0) | 2024.05.27 |
[따배시 11.1 c++] 상속의 기본1 (0) | 2024.05.26 |