Die Frage enthält nicht genug Informationen, um zu sagen, es hängt davon ab, was getStr()
tut. Zum Beispiel:
Dann müssen Sie nicht delete aufrufen.
%Vor% Dann sollten Sie delete str;
aufrufen, um ein Speicherleck zu vermeiden (und dürfen delete[]
nicht aufrufen.)
Dann sollten Sie delete[] str;
aufrufen, um ein Speicherleck zu vermeiden (und dürfen delete
nicht aufrufen.)
Dann spielt es keine Rolle, was Sie tun. Eine beliebige Art von delete
auf str
hat keine Wirkung.
Der Besitz von Ressourcen und das Freigeben vorhandener Ressourcen sind Teil der Schnittstelle zu einer Funktion und sollten gleichzeitig dokumentiert werden, während Sie dokumentieren, was der Rückgabewert tatsächlich ist.
Alles hängt davon ab, was getStr()
tut. Es kann sogar sein, dass Sie free
für den Zeiger aufrufen müssen, wenn getStr()
es mit malloc
erstellt hat. Es kann sein, dass getStr()
einen Zeiger auf einen statischen Bereich (nicht sehr threadsicher, aber es passiert) oder eine beliebige Anzahl anderer Dinge zurückgibt.
Teil des Vertrags und der Dokumentation für getStr()
sollte sein, wem der zurückgegebene Zeiger gehört.
Hier sind einige Beispiele für mögliche getStr()
Funktionen ...
In diesem Fall besitzt getStr()
den Zeiger und Sie müssen nichts tun, um ihn freizugeben. OTOH, worauf gezeigt wird, kann sich ändern, wenn du getStr()
das nächste Mal aufruft, also solltest du wahrscheinlich deine eigene Kopie erstellen, wenn du sie für längere Zeit behalten musst:
In diesem Fall müssen Sie eventuell free
für den zurückgegebenen Zeiger aufrufen:
In diesem Fall müssen Sie einfach den alten delete
für den zurückgegebenen Zeiger aufrufen:
In diesem Fall müssen Sie delete []
für den zurückgegebenen Zeiger aufrufen:
Es gibt viele andere Möglichkeiten. Wie bereits erwähnt, ist ein Teil des Vertrags für eine Funktion (der in der Dokumentation enthalten sein sollte), wer den zurückgegebenen Zeiger besitzt und wie diese Daten angezeigt werden, wenn die Verantwortung des Aufrufers dafür verantwortlich ist.
Es hängt davon ab, wie getStr()
entworfen wurde. Es könnte einen Zeiger auf einen String zurückgeben, der immer noch von jemand anderem gehört (und in diesem Fall ist die Antwort nein) oder es kann einen Zeiger auf den String zurückgeben und der Aufrufer wird der Eigentümer (und in diesem Fall ist die Antwort ja) / p>
Sie sollten die Dokumentation von getStr
wissen.
Wenn der Besitzer des zurückgegebenen Bereichs der Aufrufer ist, wäre wahrscheinlich in C ++ die Rückgabe von std::string
eine viel bessere Idee gewesen.
Es ist eine gute Idee, dies zu tun, wenn es den Rahmen sprengt. Ich würde auch empfehlen, den Zeiger auf Null zu setzen, um sicherzustellen, dass er nicht hängt:
%Vor%Tags und Links c++ destructor