1

我一直在阅读很多内容,如果您需要赋值运算符,则不要使用引用成员变量。我知道您不能重新分配引用,但由于您无法重新分配引用本身,因此您不能通过在赋值运算符中重新分配该引用变量中的所有数据来解决这个问题吗?

像这样的东西:

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

这是否有问题,或者尝试以这种方式进行分配可能会出现问题?

4

1 回答 1

1

是的,您可能会遇到问题。假设您有两个MyClass实例 A 和 B,它们共享同一个AnotherClass对象。如果您为 A 分配不同的值,那么您将破坏 B 的成员。

这个变量是干什么用的?

  • 如果多个 MyClass 需要共享和修改同一个 AnotherClass,则使用AnotherClass *. 然后只需在分配时重定向您的指针。不过,您必须跟踪有多少 MyClasses 拥有 AnotherClass,因此要么在 AnotherClass 中跟踪它,要么使用某种“智能”指针。

  • 如果 AnotherClass 太大而无法存储 MyClass 的许多副本,或者有很多很多 MyClass 的实例,那么 aconst AnotherClass *会更好。同样,您必须跟踪存在多少指向它的指针,这样您就不会泄漏内存。

  • 如果它很小,那么 MyClass 就很少,并且没有必要在它们之间共享它:使用普通对象。性能影响可能可以忽略不计。

于 2013-04-12T22:55:35.230 回答