Ich hoffe du hast die anderen Fragen richtig beantwortet
– ereOn
6. Juli ’10 um 7:38
“es gibt keinen Unterschied.” -> Das ist technisch korrekt, beide Punkte führen zu undefiniertem Verhalten, also kein Unterschied 🙂
– Fredoverflow
6. Juli ’10 um 7:55
Da es sich um eine Interviewfrage handelte, haben sie meiner Meinung nach keine Ja/Nein-Antwort erwartet. Von Ihnen wurde erwartet, dass Sie erklären, was malloc/free und new/delete bewirken, wie sie sich unterscheiden, wie sie verwendet werden und warum Sie sollten sie nicht mischen. Dies zeigt ihnen, dass Sie wissen, wie die C++- und C++-Laufzeit funktioniert, wie sie mit der C-Standardbibliothek zusammenhängt und dass Sie über diese Probleme nachdenken können. Beantworten Sie Ihre Frage also mit “Antwort […] es gibt keinen Unterschied” du hast versagt. 🙁
– Tomek Szpakowicz
6. Juli ’10 um 8:37
Wenn Sie dies tun, werden Sie auf undefiniertes Verhalten stoßen. Versuchen Sie das nie. Obwohl new könnte umgesetzt werden durch malloc() und delete könnte umgesetzt werden durch free() es gibt keine garantie, dass sie wirklich so umgesetzt werden und auch der Benutzer kann überlasten new und delete nach seinem Ermessen. Sie riskieren, auf Heap-Korruption zu stoßen.
Ansonsten vergiss das nicht, wenn du anrufst malloc() Sie erhalten Rohspeicher – kein Konstruktor wird aufgerufen – und wenn Sie aufrufen free() es wird kein Destruktor aufgerufen. Dies kann ebenfalls zu undefiniertem Verhalten und Fehlfunktionen des Programms führen.
Die Quintessenz ist… tue das niemals.
1) Undefiniertes Verhalten, wird aber wahrscheinlich “funktionieren”. Destruktoren werden aufgerufen, wenn der Speicher freigegeben wird, der wahrscheinlich nicht dekonstruiert werden möchte.
2) Undefiniertes Verhalten, wird aber wahrscheinlich “funktionieren”. Destruktoren werden NICHT aufgerufen.
dh WENN es funktioniert, und es gibt keine Garantie dafür, dann wird es wahrscheinlich nur genau so funktionieren, wie es für grundlegende eingebaute Datentypen erforderlich ist.
Dies FAQ beantwortet genau diese Fragen.
– Naveen
6. Juli ’10 um 7:03
verwandt: stackoverflow.com/questions/1350819/c-free-store-vs-heap
– Nick Dandoulakis
6. Juli ’10 um 7:08
Ich hoffe du hast die anderen Fragen richtig beantwortet
– ereOn
6. Juli ’10 um 7:38
“es gibt keinen Unterschied.” -> Das ist technisch korrekt, beide Punkte führen zu undefiniertem Verhalten, also kein Unterschied 🙂
– Fredoverflow
6. Juli ’10 um 7:55
Da es sich um eine Interviewfrage handelte, haben sie meiner Meinung nach keine Ja/Nein-Antwort erwartet. Von Ihnen wurde erwartet, dass Sie erklären, was malloc/free und new/delete bewirken, wie sie sich unterscheiden, wie sie verwendet werden und warum Sie sollten sie nicht mischen. Dies zeigt ihnen, dass Sie wissen, wie die C++- und C++-Laufzeit funktioniert, wie sie mit der C-Standardbibliothek zusammenhängt und dass Sie über diese Probleme nachdenken können. Beantworten Sie Ihre Frage also mit “Antwort […] es gibt keinen Unterschied” du hast versagt. 🙁
– Tomek Szpakowicz
6. Juli ’10 um 8:37