2016-03-24 14 views

Antwort

3

Nein es nicht sicher ist, sollten Sie das folgende Beispiel:

C c(std::string("42")); 

, wo Sie einen temporären in den Konstruktor übergeben. Auf diese Weise erstellen Sie eine freie Referenz.

+0

Would machen 'm_s' ein' const string & 'macht es sicher? Ich weiß, dass es verschiedene Regeln für die Lebensdauerverlängerung gibt, wenn es um Referenzen und Const-Referenzen geht. – Danra

+0

@Danra nein würde es nicht. Es würde weiterhin eine unentschiedene Referenz sein, auch wenn es sich um eine qualifizierte Quelle handelt. – 101010

+0

Aus Neugier, gibt es irgendeine Situation, in der der ursprüngliche Code * nicht * eine freie Referenz erzeugen würde? – Danra

2

Nein, es ist nicht sicher. Auch Member Const Referenzen verlängern nicht die Lebensdauer eines temporären (also auch keine Option). Was sollten Sie tun, stattdessen bewegt Wert aus Ihrem temporären konstruieren zu „absorbieren“, die in Ihre Klasse:

class C { 
public: 
    C(string&& s) : m_s{std::move(s)} {} 
private: 
    string m_s; 
}; 
Verwandte Themen