Перегрузка оператора назначения не вызывается

У меня есть два класса, база данных и запись.

class Database {
private:
Record* head;
public:
Database(Record*);
Database();
Database(const Database&);

Database& operator= (const Database &data);
};

class Record {
public:
Record(std::string, std::string, int, int, std::string);
Record(const Record&);
Record();

Record* next;
};

Теперь, когда я делаю это

Database PM1, PM2;
//operations on PM1
PM2 = PM1;

Все, что происходит, — это значения в PM1, назначенные для PM2. Перегрузка присваивания никогда не вызывается. Я понятия не имею, почему это может происходить. Я также попытался отладить, но функция просто не вводится. Что я делаю неправильно?

РЕДАКТИРОВАТЬ: Вот функция перегрузки, это может быть неправильно, но я еще не смог протестировать ее, потому что я даже не могу запустить ее.

Database& Database::operator= (const Database &data) {
if(this == &data)
return *this;
if(data.head == NULL) {
this->head = NULL;
return *this;
}
Record *curr1, *curr2;
curr1 = new Record(*(data.head));
this->head = curr1;
for(curr2 = data.head->next; curr1 != NULL && curr2 != NULL; curr1 = curr1->next) {
curr1->next = new Record(*curr2);
curr2 = curr2->next;
}
return *this;
}

1

Решение

Я думаю, потому что у вас есть указатель в вашем классе базы данных, и я думаю, что вы не справились с тем, что вы думаете, что перегруженный оператор доза не работает.
Вы делаете мелкую копию. так что вам нужно справиться с этим!

0

Другие решения

Объекты, возможно, должны были быть предварительно созданы для вызова функции назначения копирования.

// So instead of doing this:
Database PM1, PM2;
PM2 = PM1;

// Try this:
Database *PM1 = new Database();
Database *PM2 = new Database();
*PM2 = *PM1;
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector