Нужен ли мне виртуальный деструктор, когда я использую boost :: ublas matrix?Нужен ли мне виртуальный деструктор для boost :: ublas matrix?
Кстати, мой класс является классом шаблонов.
Нужен ли мне виртуальный деструктор, когда я использую boost :: ublas matrix?Нужен ли мне виртуальный деструктор для boost :: ublas matrix?
Кстати, мой класс является классом шаблонов.
Вы имеете в виду, что у вас есть это?
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, чтобы вы знали, что он делает, потому что это звучит, как вы просто бросить вещи вокруг и надеюсь, что это работает, что это не очень хороший подход.
да @ первый вопрос tht, как выглядит мой класс, и да, я хочу, чтобы пользователи получали мой класс. действительно спасибо alot :) –
@ismail: О, тогда уточнить: вам действительно нужно 'virtual'. – GManNickG