每当调用析构函数时,我都会收到一条奇怪的消息。由于我的私有变量之一是动态分配的数组(int *member;
),所以我这样写析构函数:
ClassSet::~ClassSet(){delete []member;}
每次调用
ClassSet
的析构函数时,我都会收到一条错误消息:Windows已在Hw1.exe中触发一个断点。
这可能是由于堆损坏所致,这表明Hw1.exe或其已加载的任何DLL中存在错误。
这也可能是由于用户在Hw1.exe具有焦点时按下了F12。
全班:
class ClassSet
{
public:
ClassSet(int n = DEFAULT_MAX_ITEMS);
ClassSet(const ClassSet& other);
ClassSet &operator=(const ClassSet& other);
~ClassSet();
private:
int size;
int *member;
};
ClassSet::ClassSet(int n){
size = n;
member = new int[n];
}
ClassSet::ClassSet(const ClassSet& other){
int i = 0;
this->size = other.size;
member = new int [capacity];
while (i<size)
{
this->member[i] = other.member[i];
i++;
}
}
Multiset& Multiset::operator=(const Multiset &other)
{
if (&other == this){return *this;}
this->size = other.size;
int i = 0;
delete [] member;
member = new int[size];
while (i<other.size)
{
this->member[i] = other.member[i];
i++;
}
return *this;
}
知道这个析构函数怎么了吗?
最佳答案
您未能实现(或实现不正确)ClassSet::ClassSet(const ClassSet&)
或ClassSet::operator=(const ClassSet&)
之一。
换句话说,您违反了Rule of Three。
但是,最好的解决方案可能不是实现它们,而是更改为动态数组分配空间的方式。尝试使用new[]
替换该成员,而不是使用delete[]
和std::vector<>
。