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]);
如果是这样,为什么?
答案 0 :(得分:2)
multi_array
库类不是为动态多态设计的。它们没有任何虚函数,因此将析构函数设置为虚拟也不合理。这是常见的STL设计,multi_array_ref
仅用作数据拥有和非拥有案例的统一接口适配器。
强烈建议不要使用您的使用示例 - 这会导致内存泄漏,因为在multi_array
调用时不会执行delete
析构函数。
但通过引用或指向multi_array
的方式访问multi_array_ref
实例是安全的。