我有兩個類,數據庫和記錄。分配運算符超載沒有被調用
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;
}
你怎麼知道你的賦值操作符從來沒有被調用? – 2013-05-05 18:07:21
你不是在調試發佈版本嗎? – 2013-05-05 18:08:13
代碼看起來是正確的,如果它確實如它在這裏所示。我會嘗試清理和重建程序。還要在賦值之前添加一個記錄/斷點,賦值運算符內的另一個記錄並運行以查看它是否碰到該行。這可能是與任務線沒有達成! – 2013-05-05 18:12:22