gpt4 book ai didi

c++ - 为什么 `boost::multi_array_ref` 的析构函数是非虚拟的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:16 24 4
gpt4 key购买 nike

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只是作为数据拥有和非拥有情况下的统一接口(interface)适配器。

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

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

关于c++ - 为什么 `boost::multi_array_ref` 的析构函数是非虚拟的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11932306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com