C++ 부모클래스를 상속받은 자식 클래스로 동적메모리 할당했을 때
글쓴이: ikpil / 작성시간: 수, 2008/05/07 - 10:50오후
상황
부모클래스를 상속받은 자식 클래스로 동적메모리 할당받고, 그 포인터를 부모클래스형식으로 받고 부모클래스를 삭제 하게 된다면, 자식 클래스의 영역의 메모리는 해체되지 않나요?
class 부모님
{
.... 12바이트
}
class 아이들 : public 부모님
{
...... 8바이트
}
// 이때 sizeof(*hehe) 사용시 12바이트로 출력됨
부모님 *hehe = new 아이들;
// 이때 부모님 소멸자만 호출됨
delete hehe;
질문
아이들 클래스 크기많음 할당된 메모리 20바이트중 12바이트는 소멸되지만 8바이트는 소멸 안되는것인가요?
코드
#include <iostream> class CBABO { public: int a; ~CBABO() { std::cout << "CBABO 소멸자 호출" <<std::endl; } private: int b; }; class CIKPIL : public CBABO { public: int c; ~CIKPIL() { std::cout << "CIKPIL 소멸자 호출" <<std::endl; } }; int main() { CBABO *hehe = new CIKPIL; std::cout << sizeof(*hehe) << std::endl; delete hehe; }
Forums:
상속받을 것을
상속받을 것을 염두에 둔 클래스라면 무조건 소멸자를 virtual로 선언해주어야 합니다.
그렇지 않으면 말씀하신 것 처럼 다형성을 이용해서 프로그래밍할때 자식클래스의 소멸자가 호출되지 않습니다.
더 자세한건 가상 소멸자에대해 찾아보시면 될것 같습니다.
가상 소멸자와 추상 소멸자를 알게 되었습니다.
한가지 의문점이 듭니다만, 글을 통해 질문을 올리겠습니다.
http://www.ikpil.com
댓글 달기