{

이번 항목은 좀 역발상으로 이야기를 쫒아 본다.

기반 클래스의 디스트럭터가 public 과 virtual 이라면, 파생 클래스에게 어떠한 영향을 미치는가?

1. 객체 생성이 자유롭다.
2. 객체의 완전한 소멸이 기반 객체의 포인터로도 가능하다.


그렇다면, protected 와 non-virtual 이라면?

1. 객체 생성이 friend나 상속 기반에서만 이루어 진다.
2. 객체의 완전한 소멸은 항상, 파생 클래스에서만 가능하다.


이 두가지 방식을 따라야 하는 이유는 무엇인가?

메모리가 누수될 가능성이 무척 커진다.

이해 못하겠다. 예제를 보여 달라.

경험해 본 적이 있는가?

2008년 6월경 쯤일 것이다. 가상이란 개념이 없는 상태에서 상속을 쓰다가 메모리 누수가 되는 것을 발견했다. 이 때 Effective C++ 을 읽고 있었는데, 딱 마음에 와 닿더라.

}

'책 정리 > C++ Coding Standards : C++ 코딩의 정석' 카테고리의 다른 글

항목 55 : 정규형의 할당 방식을 사용하라. ( Prefer the canonical form of assignment. )  (0) 2009.04.06
항목 54 : 개체의 조각화를 피하라. 기반 클래스 내에서의 복사보다는 Clone을 활용하라. ( Avoid slicing. Consider Clone instead of copying in base classes. )  (0) 2009.04.06
항목 53 : 복사의 허용 여부는 명확하게 지정하라. ( Explicitly enable or disable copying. )  (0) 2009.04.06
항목 52 : 일관된 방식으로 복사하고 제거하라. ( Copy and destroy consistently. )  (0) 2009.04.03
항목 51 : 디스트럭터 재할당 그리고 swap은 절대 실패하지 않는다. ( Destructors, deallocation, and swap never fail. )  (0) 2009.04.03
항목 50 : 기반 클래스 디스트럭터는 공용과 가상 또는 보호와 비가상으로 만들어라. ( Make base class destructors public and virtual, or protected and nonvirtual. )  (0) 2009.04.03
항목 49 : 컨스트럭터와 디스트럭터에서는 가상 함수의 호출을 피하라. ( Avoid calling virtual functions in constructors and destructors. )  (0) 2009.04.03
항목 48 : 컨스트럭터 내에서 할당 대신 초기화를 사용 하라. ( Prefer initialization to assignment in constructors. )  (0) 2009.04.01
항목 47 : 멤버 변수의 정의와 선언은 같은 순서로 하라. ( Define and initialize member variables in the same order. )  (0) 2009.04.01
항목 46 : 특정한 클래스에 맞는 new를 제공한다면, 모든 표준 형식을 제공해야 한다. ( If you provide any class-specific new, provide all of the standard forms (plain, in-place, and nothrow). )  (0) 2009.04.01
항목 45 : new와 delete는 항상 같이 제공하라. ( Always provide new and delete together. )  (0) 2009.04.01
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기

댓글을 달아 주세요

">