{

개체의 조각화는 무엇인가?
 기반 클래스 B와 상속 클래스 D가 있다고 했을 때, D의 객체가 B의 객체로 잘리는 현상을 말한다.

예를 들 수 있는가?


함수 f로 들어가는 d는 조각화가 일어 나서 b.Draw() 를 하게 될 때, 다형성을 유지하지 못한체 Base::Draw()가 호출 된다. 이는 뛰어난 다형적 디자인을 해체는 경우가 많게 된다.

이를 방지하기 위해선 어떻게 해야 하는가?
 f가 레퍼런스:reference 를 받으면 된다. 즉 void f( Base& b ); 로 선언 된다면 방지가 가능하다.

책에선 내용이 좀 길고 Clone도 설명했던데..?
 참고 사항이다. 애초에 다형적으로 사용 한다면 & 나 * 를 까먹고 안한게 잘못이다. 부득이하게 다형적 복사를 원할 떄는 Clone 함수를 만들어서, 복사하게 해야 할 것이다. 이 이야기의 초점은 splice 문제로만 국한 시켰다.

}

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

항목 59 : 헤더 파일 내에 또는 #include 앞에 네임스페이스 using을 써서는 안 된다. ( Don’t write namespace usings in a header file or before an #include. )  (0) 2009.04.08
항목 58 : 특별히 함께 작동하게끔 의도된 경우가 아니라면 타입과 함수는 분리된 네임스페이스에 넣어라. ( Keep types and functions in separate namespaces unless they’re specifically intended to work together. )  (0) 2009.04.08
항목 57 : 타입과 그의 비멤버 함수는 같은 네임스페이스 내에 넣어라. ( Keep a type and its nonmember function interface in the same namespace. )  (2) 2009.04.08
항목 56 : 필요하다면 실패가 없는 swap을 활용하라. ( Whenever it makes sense, provide a no-fail swap (and provide it correctly) )  (0) 2009.04.06
항목 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
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요