我需要一个用于boost :: ublas矩阵的虚拟析构函数吗?

时间:2010-08-15 19:37:44

标签: c++ templates boost virtual-destructor

当我使用boost :: ublas矩阵时,我需要虚拟析构函数吗?

顺便说一句,我的班级是模板课。

1 个答案:

答案 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,所以你知道它做了什么,因为听起来你只是扔东西并希望它有效,这不是一个很好的方法。