という名前のフィールドが 1 つだけある ClusterSet というクラスを定義しましたclusters
。
class ClusterSet {
std::map<std::string, std::map<std::string, float>* > clusters;
public:
typedef std::map<std::string, std::map<std::string, float> *>::iterator iterator;
typedef std::map<std::string, std::map<std::string, float> *>::const_iterator const_iterator;
iterator begin() { return clusters.begin(); }
const_iterator begin() const { return clusters.begin(); }
iterator end() { return clusters.end(); }
const_iterator end() const { return clusters.end(); }
void create_cluster(std::string representative);
void add_member(std::string representative, std::string member, float similarity);
int write_to_file(std::string outputfile);
int size();
~ClusterSet();
};
私のcreate_cluster
方法ではnew
、内側のマップにメモリを割り当て、このポインタを に格納しますclusters
。このメモリをすべて解放できるように、デストラクタを定義しました。
ClusterSet::~ClusterSet() {
ClusterSet::iterator clust_it;
for (clust_it = clusters.begin(); clust_it != clusters.end(); ++clust_it) {
std::cout << "Deleting members for " << clust_it->first << std::endl;
delete clust_it->second;
}
}
私のデストラクタが呼び出されると、すべての内部マップの割り当てが正しく解除されるようです (それぞれに対して「メンバーを削除しています...」と出力されます)。ただし、それが完了すると、「1068 バイトの "munmap" に失敗しました: 引数が無効です」という実行時エラーが発生します。何が原因ですか?
「3 のルール」について簡単に説明しましたが、なぜコピー コンストラクターや代入演算子が必要なのか、それによって問題がどのように解決されるのかがわかりません。どちらも直接使用する必要はありません。