2010-08-15 2 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

да @ первый вопрос tht, как выглядит мой класс, и да, я хочу, чтобы пользователи получали мой класс. действительно спасибо alot :) –

+0

@ismail: О, тогда уточнить: вам действительно нужно 'virtual'. – GManNickG

Смежные вопросы