class MForwardInfo { public: MForwardInfo(MProjectInfo* info) :projectInfo(info) { ; } MForwardInfo() {}; ~MForwardInfo(); QString name; QString describe; QStringList dataInfo[5]; MProjectInfo* projectInfo;} 给这个类实现深拷贝构造,并重载=号
时间: 2024-02-07 15:04:06 浏览: 128
拷贝构造函数和赋值操作符号的重载.docx
好的,我先来解释一下深拷贝和浅拷贝的概念。
浅拷贝是指将一个对象的值复制到另一个对象中,如果对象中包含指针类型的成员变量,则只是复制了指针的地址。这样,原对象和新对象的指针指向同一块内存地址,当其中一个对象对内存进行修改时,另一个对象的指针也会受到影响。
深拷贝则是在拷贝过程中,对指针类型的成员变量进行了新的内存分配,并将原对象指针指向的数据复制到新的内存地址中。这样,即使原对象和新对象的指针指向不同的内存地址,它们的数据也是相同的。
现在,我来给这个类实现深拷贝构造和重载=号:
```c++
class MForwardInfo {
public:
MForwardInfo(MProjectInfo* info)
: projectInfo(info)
{
;
}
MForwardInfo() {}
~MForwardInfo() {}
QString name;
QString describe;
QStringList dataInfo[5];
MProjectInfo* projectInfo;
// 深拷贝构造函数
MForwardInfo(const MForwardInfo& other)
: name(other.name), describe(other.describe), projectInfo(new MProjectInfo(*(other.projectInfo)))
{
for (int i = 0; i < 5; ++i) {
dataInfo[i] = other.dataInfo[i];
}
}
// 重载=号
MForwardInfo& operator=(const MForwardInfo& other) {
if (this != &other) {
name = other.name;
describe = other.describe;
for (int i = 0; i < 5; ++i) {
dataInfo[i] = other.dataInfo[i];
}
if (projectInfo != nullptr) {
delete projectInfo;
}
projectInfo = new MProjectInfo(*(other.projectInfo));
}
return *this;
}
};
```
在上述代码中,深拷贝构造函数使用了拷贝构造函数来创建一个新的MProjectInfo对象,并将原对象指针指向的数据复制到新的内存地址中。重载=号操作符实现了对象的赋值操作,同样使用了拷贝构造函数和new操作符来创建新的对象,并将原对象数据复制到新的内存地址中。同时,需要注意,如果对象中包含指针类型的成员变量,需要在析构函数中手动释放内存,避免内存泄漏。
阅读全文