【发布时间】:2010-08-04 18:52:11
【问题描述】:
我正在用这样的 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++ 将为我提供一个有效的 operator=。如果我将一个成员定义为 const cl 会吐出:
警告 C4512:“foo”:无法生成赋值运算符
【问题讨论】:
-
你的意思是写
b = foo2.b;之类的东西吗? -
operator=不是复制构造函数,它是 operator=。复制构造函数采用Class(const Class&)的形式。 -
我认为这种构造形式非常危险:这提供了一种产生“悬空引用”的简单方法。如果
newb来自一个临时对象,那么该临时对象在构造函数完成时被销毁,b将引用垃圾。 -
是的,我的意思是 b=foo2.b;我知道这很危险。
-
你可能正在寻找交换,cplusplus.com/reference/stl/vector/swap
标签: c++