#include <iostream>
#include <string>
struct A {
A(std::string s) { name = s; }
std::string name;
};
struct B {
B(std::string s) : a(A(s)) {}
A& a;
};
int main() {
B b("tom");
std::cout << b.a.name << std::endl;
}
class B
のA &aにA's object
を割り当てようとしています。私はそれをすることができる方法のカップル。リファレンスを使用してメモリを割り当てるのを避けるには?
1)をA * aにし、Bのコンストラクタ内でa = new A(s)を実行します。これは機能しますが、私は新しいや削除をしなければならないので、これを避けようとしています。
2)上にはclass B
があり、これは文字列を受け取り、左辺値参照を初期化するrvalueオブジェクトを作成します。これにより、コンパイルエラーが発生します。
3)私はA& a
〜A&& a
にすることができますが、これが良いかどうかはわかりません。それはコンパイルしているので、Coutはゴミを出す。
4)Aのインスタンスをmainに作成し、Bのコンストラクタに渡します。しかし、今のところこれを避けようとしています。
を_「私は 'クラスB'のを割り当てるしようとしていますAとAのオブジェクトがある。_それはどういう意味ですか? –
あなたのコードは整形式ではありません。 'B :: a'を' A(s) 'から初期化することはできません。前者は左辺値、後者は右値です。 –
@KerrekSB:はい、問題はそれを認めます(ポイント#2) –