#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
して保存することbar
です。
出力は、新しいオブジェクトの値のコピーと取得の両方に関して、代入演算子がその魔法を行っていないことを示唆しています。このリンクをたどりました。
実際のプログラムでは抽象クラスx
であるため、参照ではなく値に変更することはできません。x
可能であれば、ヒープ割り当ての使用を控えてください。
EDIT : 1. C++ 言語を解体したばかりであることに気付きました。「C++ian」を話すすべてのコンピューターに謝罪したいと思います。私の動機は、スタックにメンバー抽象変数を割り当てることでした。私が理解している限り、派生クラスのサイズはコンパイル時にわからないため、スタック上では実行できません。2. わかりました... 私は完全に無能です... (いいえ、シャーロック!)。「効果的な C++ プログラミング」@rhalbersma は必読です。必要なものが含まれていますが、どこにもありません(コピー構造、コピー初期化子)..とにかく1か所にあります。