class THISCLASS { private: int k[200]; int p[300]; public: THISCLASS(); }; THISCLASS::THISCLASS() { memset(this, 0x00, sizeof(THISCLASS)); }
위의 코드가 문제가 되나요?
최상위 클래스 인경우에는 문제가 안됩니다.
그러나 이 클래스가 상속 받은 클래스 중에 virtual 메소드를 가지는 경우에는
문제가 발생합니다.
즉 virtual로 선언된 메소드가 있는 경우 그 클래스는 vptr 포인터를 가지고 있는데
상속 받은 클래스에서 menset으로 초기화 하는 경우 vptr 포인터 테이블까지
초기화를 시키기 때문에 문제가 생깁니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
최상위 클래스 인경우에는 문제가 안됩니다.그러나 이 클래스가 상속
최상위 클래스 인경우에는 문제가 안됩니다.
그러나 이 클래스가 상속 받은 클래스 중에 virtual 메소드를 가지는 경우에는
문제가 발생합니다.
즉 virtual로 선언된 메소드가 있는 경우 그 클래스는 vptr 포인터를 가지고 있는데
상속 받은 클래스에서 menset으로 초기화 하는 경우 vptr 포인터 테이블까지
초기화를 시키기 때문에 문제가 생깁니다.
댓글 달기