ich habe eine ziemlich grundlegende C++ Frage, eine Funktion betrachten, die einige Eingabeparameter nimmt und schafft eine std::string
, dass aus diesen Parametern wie unten:C++ Rückkehr temporäre Objekte Verwirrung
std::string constructString(int some_parameter) {
std::stringstream ss;
// Construct a string (arbitrarily complex)
ss << "Some parameter is " << some_parameter << " right now";
return ss.str(); //Am I not returning a temporary object here?
}
Ich verstehe, dass die stringstream-object wird den Gültigkeitsbereich verlassen, wenn die Funktion zurückkehrt, aber macht das nicht auch den konstruierten String ungültig?
Was würde passieren, wenn ich den Rückgabetyp auf const char *
änderte und stattdessen ss.str().c_str()
zurückgab?
Code wie oben scheint zu funktionieren, aber ich vermute, dass nur weil der Speicher mit dem 'temporären' Objekt noch nicht mit etwas anderem überschrieben wurde, wenn ich es verwende?
Ich muss zugeben, ich bin in solchen Situationen im Allgemeinen ziemlich verwirrt, ich würde es schätzen, wenn jemand mir diese ganze "temporäre Objekte" erklären könnte (oder mir einfach in die richtige Richtung zeigen).
thx im Voraus
Wird der Destruktor aufgerufen, nachdem diese Kopie nicht von der Funktion aufgerufen wird, die constructString aufruft? Da es sich um ein temporäres Objekt handelt, nehme ich an, dass der Zeiger auf den Stapel als Rückgabewert gehalten wird. Was passiert nach der Rückgabe? Wird es zerstört, wenn kein neuer Objektbesitzer vorhanden ist? Wie der Compiler weiß, dass das Objekt zerstört werden muss oder nicht, nachdem es zurückgegeben wurde? –