c ++ operator = const引用的方法

时间:2010-08-04 18:52:12

标签: c++

我正在用类似的const引用编写类:

class B;

class foo {
  const B& b;

  foo(const B& newb): b(newb) { }

  void operator=(const foo & foo2) {
      // This does not work
      foo.b = foo2.b;
  }   
};

我正在尝试定义一个工作运算符=显然=不起作用,因为我不允许更改const引用。有没有办法让参考点指向另一个对象?

如果b不是const c ++将为我提供一个有效的运算符=。如果我将一个成员定义为const cl将吐出:

警告C4512:'foo':无法生成赋值运算符

4 个答案:

答案 0 :(得分:10)

你正在寻找的术语是“重新绑定”。在“是否有可能重新引用参考?”答案是“不,引用被定义为不可重新绑定”。但您可以使用指针并更改它指向的内容:

class B;

class foo {
    B* b;

    foo(const B& newb)
    {
        b = &newb;
    }

    void operator=(const foo& foo2)
    {
        b = &foo2.b;
    }   
};

但是,如果被分配的对象比用于赋值的对象(对于构造函数来说相同的问题,则顺便说一句),则存在悬挂指针的风险。你很可能根本不需要参考或指针:

class B;

class foo {
    B b;

    foo(const B& newb): b(newb) { }

    void operator=(const foo& foo2)
    {
        b = foo2.b;
    }   
};

如果你确实需要指针/引用(也许B是基类),那么你将需要研究智能指针来处理对象的生命周期问题。

答案 1 :(得分:4)

我认为你的代码没有任何意义。没有名为foo的对象,因此foo = foo2毫无意义。

答案 2 :(得分:3)

不,一旦初始化了引用,它引用的对象就无法更改。如果你需要这样做,指针更合适。

答案 3 :(得分:1)

您无法更改引用引用的对象。改为使用你班上的指针。