Performancefrage
-
Wenn ich eine Klasse hab, die einen vector enthält.
class MyClass { std::vector<std::string> texts; };Und diese wie folgt Klasse an eine Funktion übergebe.
void doSomething(MyClass my); ... MyClass my; //Werte setzen... doSomething(my);Wird dann immer der ganze Inhalt des vectors kopiert?
Wenn ich es als Referenz übergebe,
void doSomething(MyClass& my);wird dann auch der Inhalt kopiert?
Und wenn ich einen Pointer auf eine Instanz meiner Klasse zurückgebe und diesen dann dereferenziere, wird dann auch der Inhalt kopiert?
class OhterClass { MyClass my; MyClass* getMy(); }; ... OtherClass other; MyClass* my1 = other.getMy(); MyClass my2 = *(my1); //Wird hier kopiert?
-
void doSomething(MyClass my);wird kopiert
void doSomething(MyClass& my);wird nicht kopiert.
und der letzte Punkt ist auch richtig. Beim Zuweisen des dereferenzierte Pointers wird wieder kopiert.
-
Wenn ich die übergebe Referenz zuweise, dann wird auch wieder kopiert, oder?
void doSomething(MyClass& my) { MyClass my2 = my; }
-
Ja. Obwohl dann die Frage ist ob die Übergabe per Referenz so viel Sinn macht. Wenn man sie nicht verändert sollte man sie außerdem mit const deklarieren, damit man als Anwender der Funktion sehen kann, dass das Objekt nicht verändert wird.
-
Vellas schrieb:
Ja. Obwohl dann die Frage ist ob die Übergabe per Referenz so viel Sinn macht.
Eher nicht. Wenn innerhalb der Funktion sowieso eine Kopie erstellt wird, dann kann man den Parameter auch gleich by-value übergeben. Das ermöglicht dem Compiler etwas mehr Spielraum für Optimierungen.