#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;
}
Ich versuche class B
's A & ein mit A's object
zu vergeben. Ein paar Möglichkeiten, wie ich das machen könnte.Wie vermeidet man Speicherzuweisung durch Verwendung von Referenz?
1) Machen Sie A & a zu A * a und machen Sie a = neue A (s) in B's Konstruktor. Das funktioniert, aber ich versuche das zu vermeiden, da ich neu machen und löschen muss.
2) Oben habe ich class B
, die Zeichenfolge und erstellt ein Rvalue-Objekt, um lvalue Verweis zu initialisieren. Dies wird einen Kompilierungsfehler ergeben.
3) Ich kann A& a
zu A&& a
machen, aber nicht sicher, ob das gut ist. Da kompiliert es aber cout gibt Müll.
4) Erstellen Sie eine Instanz von A in main und übergeben Sie sie an Bs Konstruktor. Aber ich versuche das jetzt zu vermeiden.
_ "Ich versuche,' Klasse B' der zuweisen A & a mit 'A's Objekt' _ Was bedeutet das? –
Ihr Code ist nicht gut formatiert. Sie können 'B :: a' nicht von' A (s) 'initialisieren. Ersteres ist ein Referenzwert, letzteres ist ein R-Wert. –
@KerrekSB: Ja, die Frage gibt zu, dass (Punkt # 2) –