디버깅 때문에 공부하던중 전에는 몰랐던 사실을 ^.^ 알게 되었내요.

생성자나 소멸자 내부에서는 vtable이 생성이 제대로 되지 않은 관계로 가상함수가

제대로 작동하지 않는군요... ^^;;; 역시 무식하면 ㅠ.ㅠ

#include <iostream>
using namespace std;

class base
{
public:
  base() { function(); }
  virtual void function() { cout << "i'm base" << endl; }
};

class derived : public base
{
public:
  derived() { }
  virtual void function() { cout << "i'm derivedi'm derived" << endl; }
};

int main()
{
  derived d;
  return 0;
}

가상함수가 제대로 동작했다면 결과는 i'm derived 이겠지만 결과는 i'm base 입니다.

출처 : http://serious-code.net/ 의 DebuggingTips 에서
AND

우연히 디버깅을 하던중 의문점이 발견되었다. 윈도우 버전이 각각

Windows XP Home Edition (5.1, Build 2600) Service Pack 2 (2600.xpsp_sp2_gdr.050301-1519)
Windows XP Professional (5.1, Build 2600) Service Pack 2 (2600.xpsp_sp2_gdr.050301-1519)
Windows XP Professional (5.1, Build 2600) Service Pack 1 (2600.xpsp2.050301-1526)
Windows XP Professional (5.1, Build 2600) (2600.xpclnt_qfe.010827-1803)
Windows XP Home Edition (5.1, Build 2600) (2600.xpclient.010817-1148)

이렇게 다양한 버전들이 존재 한다는 것이.... 그래서 검색을 해보니 아래와 같은 결과가 ㅠ.ㅠ


과연 무슨 차이일까 ㅠ.ㅠ 이해가 .....

출처 : http://support.microsoft.com/kb/824994/ko



AND