我想从 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/