Zugriff auf internen Vektor
-
Abend,
Ich habe eine Klasse mit einem Member
std::vector<OutputDevice> outputDevices;Nun möchte ich, dass Anwender der Klasse leicht lesend auf diesen Member zugreifen können. Der Zugriff soll jedoch maximal simpel sein (also kein Iterator oder so).
Dabei hatte ich folgende Gedanken (würde mich freuen, wenn die wer kommentieren könnte!):
Möglichkeit 1:
By value return:std::vector<OutputDevice> getOutputDevices() const;Pro: Simpel, Nutzer kann internen Member nicht ändern. Contra: Langsam
Möglichkeit 2:
konstante Referenzconst std::vector<OutputDevice>& getOutputDevices() const;Pro: Simpel, Nutzer kann nur lesen. Kontra: ??
Noch eine Zusatzfrage zu Möglichkeit 2:
Sehe ich das richtig, dass bei dieser Benutzung:std::vector<OutputDevice>& foo = Manager::getOutputDevices();nicht ein einziges Mal ein CopyCtor aufgerufen wird.
Hingegen hier jedoch schon einmal:
std::vector<OutputDevice> foo2 = Manager::getOutputDevices();?
Danke!
-
const std::vector<OutputDevice>& getOutputDevices() const;Das wäre wohl die sinnvollste Variante.
const std::vector<OutputDevice>& foo = Manager::getOutputDevices(); /*const &-Variante*/Hier würde in der Tat nichts kopiert werden.
-
Möglichkeit 2 ist zu bevorzugen.
muggl schrieb:
Noch eine Zusatzfrage zu Möglichkeit 2:
Sehe ich das richtig, dass bei dieser Benutzung:std::vector<OutputDevice>& foo = Manager::getOutputDevices();nicht ein einziges Mal ein CopyCtor aufgerufen wird.
Prinzipiell ja.
Nur kompiliert das Beispiel so wie es da steht nicht
denn foo ist eine non-const Referenz, wird aber mit einer const-referenz initialisiert.const std::vector<OutputDevice>& foo = Manager::getOutputDevices();hingegen geht.