簡體   English   中英

賦值運算符重載未調用

[英]Assignment operator overload not getting called

我有兩個類,數據庫和記錄。

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;
}

我想是因為您在Database類中有指針,並且我想您沒有處理過您認為重載運算符不起作用的情況。 您進行淺拷貝。 所以你需要處理!

為了調用副本分配功能,可能需要事先實例化對象。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM