2016-07-21 24 views
0

Angenommen, ich habe eine Klasse wie diese zu speichern und zu konstruieren:Der beste Weg, Mitglied const Array oder Strings

class foo { 
    const A arr; 
    foo(B arg): arr(arg) { } 
}; 

Was ist die effizienteste Wahl für die Arten von A und B. Ich war so etwas wie dieses Denken,

class foo { 
    const std::initializer_list<std::string> arr; 
    foo(std::initializer_list<std::string> arg): arr(arg) { } 
}; 

Aber ich denke, diese Strings in arr copy-Konstrukt wird. Ich möchte in der Lage sein, dies zu tun:

std::string str1("there"), str2("now"); 
foo bar({"hello",str1,std::move(str2)}); 

und haben rvalue Saiten in den Klammern in arr bewegt.

Sollte ich std::initializer_list oder std::vector oder etwas anderes verwenden?

+0

Verwenden Sie keine 'initializer_list' als Mitglied. 'initializer_list' ist ** nicht ** ein Container, es verwaltet keinen Speicher, es bezieht sich nur auf ein extern zugeordnetes Array. Es dient zum Initialisieren von Dingen, nicht zum Speichern von Dingen. Der Hinweis ist im Namen. –

Antwort

1

Definieren arr als std::vector<std::string>, und das Argument des Ctor als std::initializer_list<std::string>, meist was Sie erraten haben.

+0

Wird 'str2' in meinem Verwendungsbeispiel mit dieser Implementierung verschoben? – SU3