由于缺少析构函数,我最近遇到了一些错误(bad_alloc)。
我目前有两个类,以这种方式设置:
class ObjOne {
friend class ObjTwo;
public: //constructors and some other random methods
ObjOne(int n) {
}
ObjOne() {
}
private:
int currSize;
int size;
int *jon;
};
class ObjTwo {
public: //constructors and some other methods
ObjTwo(ObjOne, int n) {} //
ObjTwo() {}
ObjTwo(const ObjTwo &source) { //copy constructor
num = source.num;
x = source.x;
myObjOne=source.myObjOne;
}
~ObjTwo() { //destructor
delete #
delete &x;
delete &myObjOne;
}
private:
ObjOne myObjOne;
int num, x;
};
这是我的运算符 = ObjTwo
ObjTwo& ObjTwo::operator=(const ObjTwo& other) {
num = source.num;
x = source.x;
myObjOne=source.myObjOne;
return *this;
}
首先,我的假设是(如果不正确,请更正这些):
ObjOne 不需要析构函数,因为它只是原始类型,编译器何时会使用默认析构函数来清理它。ObjTwo 确实需要一个析构函数,因为它包含 ObjOne ObjTwo 析构函数需要从 x、num 和 myObjOne 释放内存。
我已经在析构函数上做了一些尝试,但是我仍然遇到了 bad_alloc 错误(在使用巨大的循环等进行测试时)或其他错误(当前的错误在调用析构函数时会崩溃)。
感谢任何关于我做错的指导
编辑:当我简单地将它放在一个循环中时,我抛出了一个 bad_alloc 异常:
ObjTwo b(//some parameters);
ObjTwo a(//some parameters);
for (int i=0; i<20000000; i+) {
bool x = (a == b);
}
这是重载的 == 运算符
bool ObjTwo::operator==(const ObjTwo& other) {
ObjTwo temp = other;
for(int i=myObjOne.x; i>=0; i--) {
if(myObjOne.get(i)!=temp.myObjOne.get(i)) {
return false;
}
}
return true;
}
在阅读了一些错误之后,它似乎是由于内存不足引起的;我无法正常工作的析构函数会导致。这里可能是什么问题?
get 方法只返回 jon[i];