为什么“boost::multi_array_ref”的析构函数是非虚拟的



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]);

如果是这样,为什么?

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

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

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

最新更新