c ++ operator = const引用的方法

pla*_*hos 4 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;
  }   
};
Run Code Online (Sandbox Code Playgroud)

我试图定义一个工作运算符=显然=不起作用,因为我不允许更改const引用.这有一种方法让参考点指向另一个对象吗?

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

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

Max*_*ert 10

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

class B;

class foo {
    B* b;

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

    void operator=(const foo& foo2)
    {
        b = &foo2.b;
    }   
};
Run Code Online (Sandbox Code Playgroud)

但是,如果分配的对象比用于赋值的对象寿命更长(顺便提一下构造函数的相同问题),则存在悬挂指针的风险.您很可能根本不需要参考或指针:

class B;

class foo {
    B b;

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

    void operator=(const foo& foo2)
    {
        b = foo2.b;
    }   
};
Run Code Online (Sandbox Code Playgroud)

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