2012-08-13 83 views
5

之间const_multi_array_refmulti_array_refmulti_array和的关系如下:为什么`boost :: multi_array_ref`的析构函数是非虚拟的?

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

如果是这样,为什么?

+0

请避免在boost中使用指针。 boost主要是为了利用智能指针的使用而设计的 – 2012-08-16 10:54:24

回答

2

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

您的使用示例极不推荐 - 它会导致内存泄漏,因为multi_array析构函数将不会在delete调用中执行。

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

相关问题