gpt4 book ai didi

c++ - 我可以让赋值运算符像复制构造函数一样工作吗?

转载 作者:太空宇宙 更新时间:2023-11-04 11:35:56 25 4
gpt4 key购买 nike

你好,我有一个看起来像这样的类:

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

我的问题是赋值运算符,因为编译器不允许我像在复制构造函数中那样做。那是个问题,因为我需要分配的类没有实现分配运算符,我无法编辑它们,所以我不能这样做:

myClass & operator = (const myClass & x) {
C1=x.C1; // -> compile error
C2=x.C2; // -> compile error
C3=x.C3;
S1=x.S1;
return *this;
}

所以我尝试像这样实现赋值运算符:

myClass & operator = (const myClass & x) {
static myClass tmp(x);
return tmp;
}

虽然它有点工作,但我认为它在我的程序中引起了一些问题,尤其是插入到 myClasses 的 vector 中时效果不是很好。

你们能给我建议如何正确地让赋值运算符按照我的需要工作吗? (删除旧的 myClass 并使 myClass(copy) 代替旧的,或者以某种方式使用此语法分配类 :C1(copy.C1) ... {} )?

编辑:从 C1 和 C2 中删除 const 似乎可以解决我的问题。

最佳答案

您有 const 数据成员,因此您不能在赋值运算符中更改它们。另一个值得注意的事情是你在你的拷贝构造函数中做浅拷贝,你应该避免。您只是将一个指针中的地址复制到另一个指针,这意味着两个指针将指向相同的地址,如果稍后一个删除它,另一个将成为悬空指针。

关于c++ - 我可以让赋值运算符像复制构造函数一样工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23063204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com