0

=クラスのインスタンスのディープ コピーを作成できるようにするには、オーバーロードする必要があります。いくつかのランダムデータの入力ロットとして設定しようとするまで、それは非常にうまく機能します。次に、次のメッセージが表示されます。

例外: eip=004042F3 で STATUS_ACCESS_VIOLATION が発生し、スタックが出力されます..

コピーする前に配列内の値を削除する必要があると思いますが、それがどのように見えるかわかりません。私はこれを試しました:

  for (int i = 0; i != position-1; i++) {
    for (int j=0;j!=db[i]->position-1;j++)
        delete &db[i]->change[j];
    delete db[i];
}
delete[] db;
db = new DbPerson*[other.size];

、しかし、それはさらに悪化し、プログラムはさらに早く失敗して終了します..

使用されるコンポーネントの宣言は次のとおりです。

int size;
int position;
DbPerson** db;

...

class DbChange {
public:
DbChange();
const char* date;
const char* street;
const char* city;
};

DbChange::DbChange() {
date = "";
street = "";
city = "";
}

class DbPerson {
public:
DbPerson(void);
const char* id;
const char* name;
const char* surname;
DbChange * change;
int position;
int size;
};

DbPerson::DbPerson() {
position = 0;
size = 1;
change = new DbChange[1];
}

十分なスペースが残っていない場合、すべての配列のサイズを変更でき、それらに保存されたアイテムの実際の数がposition変数に保存されます。Vectorまたはstringの使用は許可されていないため、使用するようにアドバイスしないでください。オーバーロードする関数が=正常に終了し、割り当てを終了しようとするとこのエラーメッセージが出力されると確信しています。

誰かが私にデストラクタがどのように見えるかを教えてくれたら、私は本当にうれしいです。

4

1 に答える 1