프로그래밍(Programming)/c++, 11, 14 , 17, 20
가상함수를 생성자와 소멸자에 넣으면 호출이 안된다?!
3DMP
2015. 11. 13. 05:05
가상함수를 생성자와 소멸자에 넣으면 호출이 안된다고 되어있어서
실험삼아 책에 나와있는 코드를 테스트 해 보았는데 호출이 되었습니다. -_-;;
그리고 생성자와 소멸자에 가상함수를 쓰면 안된다고 나와있고 거기에 대한 자세한
설명이 없더군요. 이런저런 고민을 해 보았는데 왜 쓰면 안되는지 모르겠습니다.
코드는 대충..
class A
{
public:
A(){
test();
}
~A(){
test();
}
virtual test()
{
printf("test\n");
}
};
void main()
{
A a;
}
출력
test
test
간단하게 이정도네요.
왜 호출이 되고 왜 쓰면 안되는지 설명 부탁드립니다.
----------------------------------------------------------------
이펙티브 C++ 참고하세요.
항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자
대충 요약하면 자식이 생기기도 전에 자식 함수 호출하면 안되는 거고
자식이 사라진 다음에 자식 함수 호출 하면 안되서 그렇습니다.
https://kldp.org/node/98424
반응형