CString als Rückgabewert ?

Hallo!

Da CString ein Objekt ist, kann man dies als Rückgabewert benutzen, obwohl dies innerhalb der Funktion deklariert worden ist? Könnte es dabei Probleme geben???

Beispiel:

CString Programm::TestFunktion()
{
//Innerhalb der Klasse ein CString deklariert!!!
CString strTest;

strTest = „TEST“;

//Und dann als Rückgabe
return strTest;
}

Könnte hier das Objekt zu früh zerstört werden???

Ciao
Catmad

Nachtrag:…
„Der Speicher ist zum Zeitpunkt der Rückgabe bereits freigegeben. Ein Zugriff darauf kann zur Schutzverletzung führen!“

??? Wirklich ???

Das geht so. Wie soll man es auch sonst machen ? Ich denke, der Wert wird bei Passieren des return-statements umkopiert, an die dafuer reservierte Stelle, die bei Deklaration des Funktionskopfes generiert wird. (Das ist uebrigens bei groesseren Objekten evtl. eine Performance-Bremse, bin nicht sicher ober der Compiler das erkennt und optimiert - daher in solchen Faellen mit Pointern oder besser mit Referenzen arbeiten)

Problematisch waere aber z.B. folgendes:

void funktion(CString* rueckgabe)
{
CString einstring;
einstring=„blabla“
rueckgabe=&einstring;
}

Gruss Moriarty

1 Like

HI!

Es kann keine Probleme geben, weil mit Hilfe des Copykonstruktors eine Kopie des Objekts erstellt wird.
Allerdings ist das nicht die schnellste Methode…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]