#include <iostream>
class Bar
{
protected:
public:
int & x;
Bar(int & new_x)
:x(new_x)
{}
Bar & operator = (const Bar toCopy)
{
x = toCopy.x;
return *this;
}
};
int main()
{
int x1(1);
int x2(2);
Bar bar = Bar(x1);
std::cout << bar.x << std::endl;
bar = Bar(x2);
std::cout << bar.x << std::endl;
bar.x = 5;
std::cout << bar.x << std::endl;
std::cout << x1 << std::endl;
std::cout << x2 << std::endl;
}
输出是:
1
2
5
5
2
我要做的是复制 x
并将其保存在 objectbar
中。
输出向我表明,赋值运算符在复制和获取新对象的值方面都没有发挥作用。我已经关注了这个链接。
更改x
为值而不是引用是不可能的,因为在实际程序x
中是一个抽象类。
请尽可能避免使用堆分配。
编辑: 1. 我意识到我刚刚屠杀了 C++ 语言。我想向所有会说“C++ian”的计算机道歉。我的动机是在堆栈上分配一个成员抽象变量。据我了解,它不能在堆栈上完成,因为派生类的大小在编译时是未知的。2. 好吧...我是一个完全的n00b...(没有sh*t,Sherlock!)。“有效的 C++ 编程”@rhalbersma 是必须的。它包含必需品,但您不会在任何地方找到它们(复制构造,复制初始化程序),......无论如何都在一个地方。