我定义了一个名为 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;
}
}
当我的析构函数被调用时,它似乎正确地释放了所有内部映射(它为每个映射打印出“删除成员...”)。但是,一旦完成,我会收到一个运行时错误,上面写着“无法“munmap”1068 字节:无效参数”。这是什么原因造成的?
我已经简要地查看了“三规则”,但我不明白为什么我需要一个复制构造函数或一个赋值运算符,或者这如何解决我的问题。我永远不需要直接使用任何一个。