文字列キーとint、bool、文字列、またはさまざまなタイプのポインタを値として持つことができるハッシュマップクラスを構築しており、それを機能させたいと考えています。使用しているプログラムでは、ポインターを作成してハッシュマップに渡します。マップを破壊する必要があるときに問題が発生します。ハッシュマップのタイプがポインターの場合、コンテナーを削除する前に、ハッシュマップ(値)を削除する必要があります。
したがって、現在のコードは次のようになります。hashNode**ドロワーがあり、これを2次元配列として使用してマップ内のhashNodesへのポインターを保持します。これらの同じポインターは、別のhashNode **配列にも保持され、マップに追加されるときにそれらを格納します(ハッシュマップの拡張とコピーを容易/高速化するため)。
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;
}
1つはポインタ用です。
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クラスのインスタンスを正しく分解する別のより良い方法はありますか?または、少なくともこれを機能させる方法はありますか?