const_multi_array_ref
、multi_array_ref
和multi_array
之间的关系如下:
-
multi_array_ref
源自const_multi_array_ref
-
multi_array
源自multi_arry_ref
但是,const_multi_array_ref
和multi_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
实例是安全的。