Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

C++

new/del

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Um das Reservieren von Speicher für Objekte schneller zu machen, zeigt Ihnen der Trainer, wie Sie "new" und "delete" überladen können.

Transkript

Ganz raffiniert wird es wenn man new und delete überelädt, das geht nämlich auch. und da habe ich hier mal ein Beispiel gemacht zur Diagnose, dass man einfach mal sieht, wann was aufgerufen wird. Wir bauen also jetzt sozusagen unser eigenes new und delete. Das ist eigentlich schon schön, dass man in C++ da keine Einschränkungen hat und wirklich alles machen kann. So eine eigene Speicherverwaltung könnte ja durchaus Vorteile haben, um Geschwindigkeiten zu Optimieren und auch vorhersehbares Verhalten zu erzeigen. So, jetzt da machen wir hier mal das Erste. Ein void *operator new heißt er dann in dem Fall, size_t size muss man das angeben, das ist nämlich die Größe des Speicherbereichs der angefordert wird. Dabei interessiert den new operator überhaupt nicht was für Daten das sind, der kriegt einfach nur die Größe als Parameter. Und hier kann ich mit void *mem = malloc, wir nehmen mal das malloc. eine dynamische Größe von size,also so viel Speicher wird jetzt reserviert und hier gebe ich mit new einfach mal die Größe aus, damit wir nachher was sehen können. Wenn das NULL ist, muss man mit exite(1) raus, dann ist irgendein Fehler, dann hören wir im System auf, dann ist Schluss. Normalerweise sollte aber mem rauskommen, und zwar der Wert. aber das müsste man ja nicht so machen, da könnte man natürlich auch eine entsprechende Fehlermeldung ausgeben. So, und jetzt machen wir noch eine new für ein array, das Sieht auch nicht anders aus, das muss man aber ander deklarieren. Wenn ich ein array anlege mit new, bekomme ich hier eckige Klammer auf, eckige Klammer zu und damit kann ich den Operator auch überschreiben, ansonstent ist es genau das Gleiche wie wir das vorher hatten. Wir haben hier noch die Möglichkeit dazu zu schreiben, vielleicht machen wir es hier unten mal, new array,damit wir nachher später wissen, dass es von einem array herkam. Jetzt kommt das Ganze rückwärts, delete kann ich auch überschreiben, ich muss ja den Speicher auch wieder freigeben. Wenn pmem, das zeigt mir jetzt auf die Speicherzelle, ungleich NULL ist, dann gebe ich es eben mit free frei und stelle eine NULL ran. Hier kann man auch trickreiche Sachen machen, die man dann noch Daten versteckt vorher, nämlich bevor man hier mem zurückgibt, könnte man da noch was unterbringen irgendwelche Informationen, die nachher dem Programm aber unbekannt sind, nur seinem eigenen delete zum Beispiel von Nutzen sein können. Jetzt machen wir noch delete [ ], nämlich das array, das ist hier genau das Gleiche, weil hier wissen wir jetzt auch nicht, ob es ein array ist, das free händelt es aber korrekt. Dann habe ich noch eine eigene Klasse, damit wir ein bisschen spielen können was da ist, dann kann ich nämlich eine new und delete auch nochmal getrennt überladen. Hier haben wir einfach paar Variablen. Eine wird davon dynamisch angelegt, nämlich p1. Das andere ist aber auch eine Struktur, die nachher dynamisch angelegt werden soll. Dazu mal zum Hauptprogramm, hier mal einen dynamischen Pointer new long, dann ein para,ein array mit new long [10], damit wir das auch sehen, hier mal zum Spaß einen Wert ausgeben und das Ganze hier auch zum Test ausgeben, dann geben wir es wieder frei, den p zuerst und dann para. Das haben wir zwar gar nicht verwendet Datenmäßig, aber geben mal hier frei, hier legen wir unsere Klasse mal an mit new myclass und geben sie anschließend wieder frei. Eigentlich eine ganz einfache Geschichte. Nun schauen wir uns mal an wie das Ganze aussieht. Da wird es schon viel komplizierter, wir haben hier erstmal den Long angelegt, dann haben wir unser Feld angelegt unser Testausgabe gemacht, dann geben wir das p wieder frei, das wissen wir natürlich hier nicht mehr was es war. Das delete array geben wir auch wieder frei, da müsste man mer Informationen speichern, das könnte man im Prinzip machen, wenn man wissen will was das immer freigegeben hat. Nun gut, und hier mit new:108 wird unsere Klasse alloziert und innerhalb von der Klasse mit new:4 nochmal der long, den wir da auch als Pointer entsprechend angegeben haben. Also das kommt dann danach im Konstrucktor und dann wenn ich mein delete von der Klasse angebe, werden hier zwei deletes aufgerufen, einmal das delete von dem Pointer über mein Destruktor und dann das delete der Klasse selbst, nämlich hier diese 108 bytes, die da reserviert wurden. Jetzt will ich mal schauen, ob das hier funktioniert, was ich da vorbereitet habe. Das tue ich hier mal markieren und jetzt wegkommentieren. Jetzt habe ich hier ein eigenes new, new in class, sonst ist es genau das Gleiche wie vorher und ein delete in class. Jetzt müssten wir diesen Viererblock, den wir da reserviert haben, nochmal getrennt sehen können und dann sieht man hier auch was jetzt passiert: Da kommt jetzt folgendes, das ist aber ganz interessant was da gemacht wird, nämlich die Klasse selber wird jetzt hier new in class mit dem new angelegt, der Viererblock innendrin aber nicht, er wird mit unserem äußeren new angelegt und wieder freigegeben entsprechend und hier wird die Klasse gelöscht. Also das ist auch nochmal wichtig zu wissen, welcher da auf wen wirkt instgesamt. Also damit haben Sie gelernt, wie man new und delete überschreiben kann.

C++

Machen Sie sich mit den einfachen Grundlagen zu C++ vertraut und lernen Sie anhand zahlreicher Übungs- und Codebeispiele die Klassenkonzepte, Prozeduren und Funktionen kennen.

9 Std. 3 min (143 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Video-Training auf DVD mit Bonusmagazin

+ Tutorial to go: Mit Videos für iPod, iPhone & Co.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!