Ты имеешь в виду, что у тебя есть это?
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;
Обратите внимание, что оно имеет 1016 * не имеет никакого отношения к тому, какие члены есть в базовом классе.Вам всегда нужен виртуальный деструктор, если пользователи будут удалять производные классы через указатель на базовый класс.
Я бы порекомендовал вам получить книгу так что вы знаете, что он делает, потому что звучит так, будто вы просто разбрасываетесь вещами и надеетесь, что это сработает, что не очень хороший подход.