我正在用类似这样的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是基类),那么你将需要研究智能指针来处理对象的生命周期问题.