Ich wurde dies in einem kürzlichen Interview gefragt, im Grunde schrieb ich eine Funktion, um die Funktionalität von free und das Zuweisen von null zu kombinieren. Ich antwortete auf die folgende Weise:Eine Funktion schreiben, um einen Zeiger freizugeben und ihm zuzuweisen NULL
void main()
{
int *ptr;
ptr = new int;
ptr = newdelete(ptr);
}
(int*) newdelete (int *ptr)
{
delete(ptr);
return NULL;
}
So nach der Ausführung, die ptr
lokal für main
den Nullwert halten, wie ich es von der newdelete
Funktion zurückzukehre. Wenn ich NULL
in der newdelete Funktion gerade zugewiesen hatte, würde die ptr
lokale zu newdelete
nulliert werden und nicht die ptr
lokale zu main
.
Ich denke meine Lösung war korrekt, der Interviewer akzeptiert es auch. Er erwartete jedoch eine andere Antwort. Er bestand darauf, dass ich die nicht von der Funktion zurückgebe und immer noch das gewünschte Ergebnis erziele.
Gibt es eine Möglichkeit, das zu erreichen? Alles, was ich mir vorstellen kann, ist die Übergabe eines anderen Arguments, das den Zeiger auf den Zeiger ptr
local zu main
darstellt, aber ich sehe nicht, warum es besser ist als das, was ich getan habe!
Ich denke, du meintest 'new int', weil' New' kein definierter 'C++' Operator ist. – ereOn
Übergeben Sie einen Verweis auf den Zeiger. –
http://stackoverflow.com/questions/1265666/reason-why-not-to-have-a-delete-macro-for-c/1265681#1265681 – Goz