【发布时间】:2013-04-29 13:02:15
【问题描述】:
我有两个类,Database 和 Record。
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;
}
【问题讨论】:
-
你怎么知道你的赋值运算符永远不会被调用?
-
你不是在调试发布版本吗?
-
代码看起来是正确的,如果它真的像这里显示的那样。我会尝试清理和重建程序。还要在赋值之前添加一个日志/断点,在赋值运算符中添加另一个日志并运行以查看它是否命中该行。可能永远不会到达分配的行!
-
是的,它与作业直接匹配,我逐步完成,它就继续。从不进入过载。我在重载中也有一个断点,而且它永远不会停止。我一直在考虑这个问题,但我不知道该怎么做,除了将我所有的丑陋代码发布在 github 上或其他什么地方。对于应该如此简单的修复来说,这似乎是不必要的。
-
对我来说似乎是正确的。可以写赋值运算符重载函数的主体吗?
标签: c++ overloading copy-constructor equivalent