我正在用类似的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':无法生成赋值运算符
答案 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)
您无法更改引用引用的对象。改为使用你班上的指针。