为什么`boost :: multi_array_ref`的析构函数是非虚拟的?

时间:2012-08-13 10:17:57

标签: c++ boost-multi-array

const_multi_array_refmulti_array_refmulti_array之间的关系如下:

  • multi_array_ref源自const_multi_array_ref
  • multi_array源自multi_arry_ref

但是,const_multi_array_refmulti_array_ref的析构函数是非虚拟的。实际上,它们没有明确实现的析构函数。只有multi_array有一个。这是否意味着不建议使用以下用途?

multi_array_ref<float, 2> * = new multi_array<float, 2>(extents[3][3]);

如果是这样,为什么?

1 个答案:

答案 0 :(得分:2)

multi_array库类不是为动态多态设计的。它们没有任何虚函数,因此将析构函数设置为虚拟也不合理。这是常见的STL设计,multi_array_ref仅用作数据拥有和非拥有案例的统一接口适配器。

强烈建议不要使用您的使用示例 - 这会导致内存泄漏,因为在multi_array调用时不会执行delete析构函数。

但通过引用或指向multi_array的方式访问multi_array_ref实例是安全的。