我正在构建一个 hashmap 类,它可以将字符串键和整数、布尔值、字符串或不同类型的指针作为其值,并且我希望它能够工作。对于我使用它的程序,我创建指针并将其传递到哈希图中。当我需要破坏地图时,问题就来了。如果哈希图的类型是指针,我需要在删除它的容器之前删除它(值)。
所以我现在的代码是这样的:我有一个 hashNode** 抽屉,我用它作为一个二维数组来保存指向地图中 hashNodes 的指针。这些相同的指针也保存在另一个 hashNode** 数组中,该数组在将它们添加到 map 时存储它们(为了便于/加快增长和复制 hashmap 的速度)。
template <typename V>
class str_map {
public:
// ...
virtual ~str_map() {
str_map<V>::~str_map();
}
// ....
};
然后我有一堆这样的方法:一个用于常规值:
template <>
str_map<int>::~str_map() {
for(int i=0; i < count && array[i] != NULL; i++){
delete array[i];
}
delete array;
delete drawers;
}
一个用于指针:
template <>
str_map<str_map<int>*>::~str_map() {
for(int i=0; i < count && array[i]->val() != NULL; i++)
delete array[i]->val();
for(int i=0; i < count && array[i] != NULL; i++){
delete array[i];
}
delete array;
delete drawers;
}
是否有另一种更好的方法来正确解构 str_map 类的实例,以便正确处理所有内存?或者至少有一种方法可以使这项工作?