C : 从 std::map 继承

新手上路,请多包涵

我想继承 std::map ,但据我所知 std::map 没有任何虚拟析构函数。

因此是否可以在我的析构函数中显式调用 std::map 的析构函数以确保正确的对象销毁?

原文由 Sebastian Hoffmann 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
1 个回答

析构函数确实被调用,即使它不是虚拟的,但这不是问题。

如果您尝试通过指向 std::map 的指针来删除您的类型的对象,则会出现未定义的行为。

使用组合而不是继承, std 容器不应该被继承,你也不应该被继承。

我假设您想扩展 std::map 的功能(假设您想找到最小值),在这种情况下,您有两个更好且 合法 的选项:

1)如建议的那样,您可以改用组合:

 template<class K, class V>
class MyMap
{
    std::map<K,V> m;
    //wrapper methods
    V getMin();
};

  1. 自由功能:
 namespace MapFunctionality
{
    template<class K, class V>
    V getMin(const std::map<K,V> m);
}

原文由 Luchian Grigore 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏