最近、デストラクタがないためにいくつかのエラー (bad_alloc) が発生しました。
現在、次のように設定された2つのクラスがあります。
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 の operator= があります
ObjTwo& ObjTwo::operator=(const ObjTwo& other) {
num = source.num;
x = source.x;
myObjOne=source.myObjOne;
return *this;
}
まず、私の仮定は次のとおりです(間違っている場合は修正してください):
ObjOne はデストラクタを必要としません。これはプリミティブ型のみであり、コンパイラがデフォルトのデストラクタを使用してクリーンアップする場合です。ObjTwo DOES には 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]; を返します。