가상함수를 생성자와 소멸자에 넣으면 호출이 안된다고 되어있어서
실험삼아 책에 나와있는 코드를 테스트 해 보았는데 호출이 되었습니다. -_-;;
그리고 생성자와 소멸자에 가상함수를 쓰면 안된다고 나와있고 거기에 대한 자세한
설명이 없더군요. 이런저런 고민을 해 보았는데 왜 쓰면 안되는지 모르겠습니다.
코드는 대충..
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
반응형
'프로그래밍(Programming) > c++, 11, 14 , 17, 20' 카테고리의 다른 글
__pragma(optimize #pragma] Wince Optimize Level 해제하기 (0) | 2016.01.08 |
---|---|
지연 호출 (Deferred Call) (0) | 2015.11.25 |
멤버 함수는 인스턴스와 상관없이 동일한 주소를 공유한다 (0) | 2015.11.01 |
deprecated declaration (0) | 2015.07.14 |
십육진수 헥사 문자열을, 숫자(정수)로 변환 예제 (0) | 2015.03.11 |