2016-07-01 3 views
1

sagen, dass ich einen Konstruktor und einen delegierten KonstruktorWie verwende ich named Konstruktoren in C++ mit Konstruktordelegaten?

SomeClass(const std::string&& _name) : obj_needs_construction(100), name(_name) {} 
SomeClass(const std::string& _name) : SomeClass(_name) {} 

Aber beide die gleiche Art verwenden, habe ich viele Lösungen gesehen, aber sie scheinen alle zu arbeiten, weil sie verschiedene Arten machen, aber das wird nicht funktionieren in meine Situation. Wie kann ich das lösen?

Danke.

+0

'const std :: string &&' ist ziemlich nutzlos. Was versuchst du zu erreichen? –

+0

Wenn ich diesen String nur für den Konstruktor verwende, sollte ich ihn nicht mehr brauchen. Oder wird es trotzdem optimiert? –

Antwort

1
SomeClass(const std::string& _name) : SomeClass(std::move(_name)) {} 
+0

Das funktioniert, aber es lohnt sich vielleicht nicht, Delegierte zu verwenden, weil es meinen Code verwirrender macht, was das Gegenteil meines Ziels ist. –

+0

@ThomasStiteler, das ist dein Ruf. –

+0

Gewählt als Antwort, weil es die Antwort ist, obwohl ich Delegieren nicht verwenden werde –

3

ersetzen

SomeClass(const std::string&& _name) : obj_needs_construction(100), name(_name) {} 
SomeClass(const std::string& _name) : SomeClass(_name) {} 

& hellip; mit nur

SomeClass(std::string const& name) 
    : obj_needs_construction(100) 
    , name_(name) 
{} 

Das ist es. Es wird gut für Provisorien als tatsächliche Argumente funktionieren.

+0

Mein Beispiel enthielt nur einen Konstruktor, aber ich habe tatsächlich viel mehr und um Code aufzuräumen benutze ich einen delegierten Konstruktor, deshalb bin ich nicht nur Verwenden Sie das. –

+0

Nun, Sie erhalten keine Antworten auf Probleme, die Sie nicht einmal erwähnen. –