你好,我得到了一个类似于以下的课程:
class myClass{
public:
//other consturctors
//copy constructor:
myClass (const myClass & x)
: C1(x.C1), C2(x.C2), C3(x.C3), S1(x.S1) {};
//other functions
myClass & operator = (const myClass & x);
private:
const otherClass1 C1;
const otherClass2 C2;
const otherClass3 * C3;
string S1;
}
我的问题在于assingment运算符,因为编译器不允许我像复制构造函数那样执行它。这是问题,因为我需要分配的类并没有实现分配运算符,我无法编辑它们所以我不能这样做:
myClass & operator = (const myClass & x) {
C1=x.C1; // -> compile error
C2=x.C2; // -> compile error
C3=x.C3;
S1=x.S1;
return *this;
}
所以我试图实现assign运算符,如:
myClass & operator = (const myClass & x) {
static myClass tmp(x);
return tmp;
}
althoght它的工作一点点,我认为它在我的程序中引起了一些问题,特别是插入myClasses的矢量并不能很好地工作。
你们可以给我建议如何正确地让分配操作员像我需要的那样工作吗? (删除旧的myClass并使myClass(copy)不再是旧的,或以某种方式使用以下语法分配类:C1(copy.C1)... {})?
编辑:从C1和C2中删除const似乎是解决我的问题的方法。
答案 0 :(得分:1)
您有const数据成员,因此您无法在赋值运算符中更改它们。 另一个值得注意的事情是你在拷贝构造函数中做了浅拷贝,你应该避免。你只是在一个指向另一个指针的地方复制地址,这意味着两个指针都指向同一个地址,如果以后一个指针删除它,另一个将成为悬空指针。
答案 1 :(得分:0)
忘记静态的第3段代码,你应该尝试让第二段代码工作,并解决2个编译错误。
如果删除constness不起作用,则可以在堆上存储C1和C2。
const otherClass1 * C1;
const otherClass2 * C2;
将它们更改为指针并在需要的地方新建/删除它们,这样你就可以使用复制构造函数来代替赋值运算符(你说这些类不存在)