memset(this, 0x00, sizeof(THISCLASS))

purewell의 이미지

class THISCLASS
{
  private:
    int k[200];
    int p[300];

  public:
    THISCLASS();
};

THISCLASS::THISCLASS()
{
  memset(this, 0x00, sizeof(THISCLASS));
}

위의 코드가 문제가 되나요?

hyunduck0의 이미지

최상위 클래스 인경우에는 문제가 안됩니다.

그러나 이 클래스가 상속 받은 클래스 중에 virtual 메소드를 가지는 경우에는

문제가 발생합니다.

즉 virtual로 선언된 메소드가 있는 경우 그 클래스는 vptr 포인터를 가지고 있는데

상속 받은 클래스에서 menset으로 초기화 하는 경우 vptr 포인터 테이블까지

초기화를 시키기 때문에 문제가 생깁니다.