Direktes Aufrufen des Konstruktors ohne Variable guter Stil?
-
Ist es eigentlich guter Stil, einen Konstruktor direkt aufzurufen, ohne eine Variablendeklaration zu haben? Zum Beispiel hier:
class Test { public: Test(int n); }; void Funktion(const Test &test); int main() { Funktion(Test(7)); // Hier! }Ist das unproblematisch oder sollte man das unterlassen und lieber das hier schreiben?
int main() { Test test(7); Funktion(test); }
-
Ich halte es für guten Stil. Du hälst die Variablen so lokal wie moeglich, in diesem Fall ist es nur eine temporäre Variable (erlaubt potenziell mehr Optimierungen durch den Compiler).
Praktisch wirst du das aber eher weniger antreffen, einfach aus dem Grund, weil die Variablen meist auch noch für andere Funktionsaufrufe o.ä. benötigt werden.
-
Die erste Variante ist i.d.R. vorzuziehen, wenn du das Objekt danach nicht mehr benötigst. Da es temporär ist, wird es auch gleich wieder gelöscht. Ist hier egal, aber bei speicherhungrigen Objekten ist es wünschenswert, dass der Speicher so früh wie möglich wieder freigegeben wird.
Außerdem: spart Platz und ist übersichtlicher.
Auf Exceptionsicherheit musst du allerdings wie sonst auch achten.