为具有引用成员变量的类创建赋值操作符
Creating an Assignment Operator for a class that has Reference Member Variables
我已经读了很多,如果你需要一个赋值操作符,那么不要使用引用成员变量。我知道你不能重新赋值一个引用,但是你能不能通过重新赋值操作符中引用变量内的所有数据来解决这个问题呢?因为你不能重新赋值引用本身。
像这样:
class MyClass {
AnotherClass& someObject;
...
public:
...
MyClass& operator= (const MyClass& that) {
if (&that != this) {
this.someObject.member1 = that.someObject.member1;
this.someObject.member2 = that.someObject.member2;
}
return *this;
}
}
这样做有问题吗?或者这样做会产生问题吗?
是的,您可能会遇到问题。假设您有两个MyClass
实例A和B,它们共享同一个AnotherClass
对象。如果给A赋不同的值,就会弄乱B的成员。
这个变量是用来做什么的?
-
如果许多MyClasses需要共享和修改同一个AnotherClass,则使用
AnotherClass *
。然后在赋值时重定向你的指针。你必须跟踪有多少MyClasses拥有AnotherClass,所以要么在AnotherClass中跟踪,要么使用某种"智能"指针。 -
如果AnotherClass太大而不能存储许多副本,或者有许多MyClass的实例,那么
const AnotherClass *
将更好地工作。同样,您必须跟踪有多少指向它的指针存在,所以您不会泄漏内存。 -
如果myclass很小,那么myclass就很少,不需要在它们之间共享:使用普通对象。
相关文章:
- c++中的重载赋值操作符
- c++类继承和赋值操作符
- 带引用类成员的赋值操作符
- 复制构造函数,赋值操作符重载
- c++派生类赋值操作符
- 通过调用Move赋值操作符实现Move构造函数
- 带有映射的赋值操作符
- 单参数构造函数和赋值操作符
- 如何从复制赋值操作符调用复制构造函数
- c++复制构造函数,重载赋值操作符,方法get()
- 用于具有const数据成员的类的move和右值赋值操作符
- 类赋值操作符和复制构造函数
- 赋值操作符重载
- 影响正确性的move构造函数/赋值操作符示例
- 当类是子类时重载赋值操作符
- 如果没有定义Move语义(Move构造函数和Move赋值操作符),编译器是否默认优化
- 为具有引用成员变量的类创建赋值操作符
- 创建了自己的字符串类——重载赋值操作符和析构函数的错误
- 给定了一个变量,编译器是否总能安全地创建赋值操作符?
- c++:如果类禁用赋值操作符,是否有可能创建一系列类对象(使用vector?)