2012-08-13 85 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實例將是安全的。

相關問題