当我使用boost :: ublas矩阵时,我需要虚拟析构函数吗?
顺便说一句,我的班级是模板课。
答案 0 :(得分: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;
请注意, nothing 与基类中的成员有关。如果用户将通过指向基类的指针删除派生类,则总是需要虚拟析构函数。
<子> 我会推荐你get a book,所以你知道它做了什么,因为听起来你只是扔东西并希望它有效,这不是一个很好的方法。 子>