C++:从 std::map 继承

标签 c++ inheritance stdmap virtual-destructor

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

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

最佳答案

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

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

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

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

1) 按照建议,您可以改用合成:

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

2) 自由功能:

namespace MapFunctionality
{
    template<class K, class V>
    V getMin(const std::map<K,V> m);
}

关于C++:从 std::map 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10477839/

相关文章:

C++ 模板类自引用

c++ - C++11 std::atomic 是否保证互斥和顺序一致性?

c++ - 制作一个 3x3 正方形的棋盘,要求用户以星号表示其宽度和高度

C++ std::map - 如果一个线程写入而另一个线程始终使用不同的键读取,则线程安全吗?

C++,std::map 的迭代器

c++ - 具有多个父项目的 Qt 树模型

c++ - C++ 中带有继承类的链表?

c# - 获取通用抽象类的所有继承类

c# - 基类 - 是否应实现所有方法

c++ - 如何为 map 创建自己的比较器?