728x90
상속을 받는 클래스가 있다고 가정하자.
c++에서는 생성자는 부모클래스 생성자에서 자식클래스의 생성자 순으로 호출된다.
소멸자에서 만약 부모 클래스의 소멸자에 Virtual을 정의했다면 제거할 때 자식클래스의 소멸자가 호출된 후 부모 클래스의 소멸자가 호출된다. Virtual 클래스로 소멸자를 정의하지 않은 상태에서 자식클래스를 부모클래스 포인터를 사용하여 제거를 한다면 부모클래스의 소멸자만 호출되며 자식의 소멸자는 호출되지 않는 다 즉 완벽하게 제거가 이루어졌다고 볼 수 없다.
virtual로 정의한 부모클래스에서 부모포인터로 삭제 할 때 자식의 소멸자가 호출되는 이유는 virtual로 정의된 클래스가 있다면 가상함수테이블이 만들어져 바이너리 영역에 기록되며 해당 클래스로 만들어진 객체에서 함수를 호출할 때 호출 클래스의 가상함수 테이블을 참조해서 함수를 호출하기 때문이다.
728x90
'VisualStudio > C++' 카테고리의 다른 글
[C++] 스마트 포인터 (shared_ptr, weak_ptr, unique_ptr) (0) | 2023.07.31 |
---|---|
[C++] STL(Standard Template Library) (0) | 2023.07.25 |
[C++] 형변환 (static_cast, dynamic_cast, const_cast, reinterpret_cast) (0) | 2023.07.24 |
[C++] 얕은복사 VS 깊은복사 (0) | 2023.07.24 |
[C++] SASM 어셈블리 언어 입문 (0) | 2023.07.03 |