由於缺少析構函數,我最近有一些錯誤(bad_alloc)。C++析構函數,動態分配
我現在有兩個班,這樣設置:
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];
你沒有'new'任何東西,沒有必要'delete'。 –
你的例子都不正確。你似乎有一些誤解。如果你的類分配了一些內存,你需要一個析構函數。 ObjTwo不會這樣做,也不需要析構函數。 ObjOne也沒有提供給我們的代碼。但是ObjOne中的大紅旗是指針。如果ObjOne分配一些內存並使用'jon'指向這個內存,那麼它確實需要一個析構函數。你應該尋找什麼,如果你的類包含指針,那麼他們可能需要一個析構函數。 – john
編輯完成後 - 錯誤可能是因爲您的內存不足。但是你還沒有向我們展示任何分配內存的代碼。到目前爲止,你向我們展示的只是糟糕的析構函數。發佈完整的代碼。 – john