2012-08-01 3 views
1

delegate 패턴에서 destuctor 가상을 만드는 것이 좋습니다? 한편 클래스 MyClassDelegate대리인에게 가상 소멸자가 있어야합니까?

class MyClass 
{ 
    ... 
}; 

class MyClassDelegate 
{ 
    ... 
}; 

는 인터페이스로부터 상속 될 예정이지만, 다른 한편으로는 MyClassDelegate 포인터

당신은 어떻게 생각을 통해 deletesubclass에 안거야?

답변

5

가상이 아닌 것으로 보호하는 것을 고려해 볼 수 있습니다. 그런 다음 실제로 그런 종류의 포인터를 사용하여 개체를 삭제할 수 없다는 사실을 문서화하고 있습니다. 더 많은 토론을 찾을 수 있습니다 here

0

이미 다른 가상 함수가있는 경우 소멸자 가상 만들기는 거의 오버 헤드가 없습니다.

+0

나는 그것을 이해한다. 그러나 문제는 성능에 관한 것이 아니라 디자인에 관한 것이다. – Andrew

0

MyClassDelegate에서 상속받는 클래스를 만들려면 가상 소멸자를 지정하는 것이 가장 좋습니다.

초기 설계에서는 에 대한 포인터를 계획하지 않을 수 있지만이 디자인은 발전 할 것이며 사용자의 선택에 따라이 진화 방법에 대한 제약이 부과 될 것입니다. 이 특정 제약 조건은 잊기 쉽기 때문에 결과가 충돌 (또는 미묘한 버그)로 진단하는 데 시간이 걸릴 수 있습니다.

관련 문제