2010-08-15 3 views

답변

1

당신은 이것을 가지고 있습니까?

template <typename Whatever> 
struct my_class 
{ 
    // ... 

    boost::ublas::matrix m; 
}; 

여기에 가상 소멸자가 있어야합니다.


사용자가 클래스에서 공개적으로 파생되도록하려는 경우 가상 소멸자가 필요합니다. 그래서 그 질문은 "사용자가 공개적으로 내 수업에서 파생 될 것입니다. 가상 소멸자가 필요합니까?" 네, 그렇습니다.

이유는이 일을하는 것은 정의되지 않은 동작에 이르게한다는 것입니다 :

struct base {}; // no virtual destructor 
struct derived : base {}; 

base* b = new derived; 

// undefined behavior, dynamic type does not match static type, 
// and the base class does not have a virtual destructor 
delete b; 

이되지 않습니다는베이스가 무엇인지 회원들과 함께 할 수 아무것도이 없습니다

struct base { virtual ~base(){} }; // virtual destructor 
struct derived : base {}; 

base* b = new derived; 

// well-defined behavior, dynamic type does not match static type, 
// but the base class has a virtual destructor 
delete b; 

하는 것으로 수업. 은 사용자가 기본 클래스에 대한 포인터를 통해 파생 클래스를 삭제할 경우 가상 소멸자가 필요합니다. 그냥 주위에 물건을 던져 매우 좋은 접근하지 않은, 그것이 작동하는 희망처럼 소리 때문에


난 당신이 get a book 그래서 당신이 무엇을 알고 추천 할 것입니다.

+0

예 @ 처음 질문은 내 수업 모습이고, 예 저는 사용자가 내 수업에서 파생되도록 할 생각입니다. 정말 고마워요 :) –

+0

@ismail : 오, 그럼 명확히하기 위해 : 당신은'가상'이 필요합니다. – GManNickG

관련 문제