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?
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. –