Eigene Speicherallokation II
-
Hallo zusammen,
Vor einiger Zeit habe ich einen Thread zu einem ähnlichen Thema eröffnet.Ich möchte eine Klasse schreiben, die alle Speicheranforderungen und -freigaben über
newunddeletekontrolliert, aufzeichnet und entsprechende Fehler bzw. Memory Leaks meldet. Nun dachte ich, dass wenn ich die Klasse einigermassen komfortabel gestalten will, STL-Container nützlich sein könnten. Nur müsste ich da meinen eigenen Allokator schreiben, da janewunddeletebereits überladen werden. Dabei bin ich mich noch nicht sicher, wie ich die Allokator-Methoden implementieren soll.Ich habe eine solche Memory-Kontrollklasse bereits einmal programmiert, allerdings ohne STL und mit ziemlichem C-Gefrickel. Damals habe ich
operator newundoperator deleteüberladen, indem ich intern die C-Funktionenmalloc()undfree()verwendet habe. Jetzt will ich aber versuchen, etwas Konsistenz reinbringen. Aber so wie ich das sehe, komme ich nicht darum herum, hier C und C++ zu mischen:- Für die Funktion, die ein Objekt in einem vorgegebenen Speicherbereich konstruiert, muss ich Placement New benutzen. Manueller Konstruktoraufruf funktioniert leider nicht generisch (siehe verlinkter Thread).
operator newkann ich nicht mehr verwenden, um Speicher zu allokieren, da diese Funktion bereits global überladen wurde. Sie ist nämlich Bestandteil der Speicherkontrolle.- Gleiches gilt für
operator delete, um eine Deallokation durchzuführen.
Wie gehe ich das am besten an? Sind
malloc()undfree()legitim, wenn man die Objekte mit Placement New konstruiert und mit manuellem Destruktoraufruf destruiert?
-
Nexus schrieb:
Wie gehe ich das am besten an? Sind
malloc()undfree()legitim, wenn man die Objekte mit Placement New konstruiert und mit manuellem Destruktoraufruf destruiert?Ja, malloc und free bieten sich definitiv an. Einen simplen Allokator für std-Container findest du hier, hab ich vor einer knappen Stunde selbst erst gesucht

edit: In dem Allokator aus dem Link musst du halt noch "::operator new" und "::operator delete" durch malloc bzw free ersetzen.
-
Es ist ja nicht so, dass malloc und free grundsätzlich "böse" sind. Nur hat man in C++ bessere Möglichkeiten und man braucht malloc und free nicht. Wenn man allerdings weiss, was man macht, dann sind C-Funktionen völlig OK. Die STL macht ja auch davon gebrauch.
-
Nexus, veröffenlichst du das, wenn's fertig ist? Ich wäre jedenfalls interessiert

-
Badestrand schrieb:
Nexus, veröffenlichst du das, wenn's fertig ist? Ich wäre jedenfalls interessiert

Es wird wahrscheinlich noch ein wenig dauern, bis es fertig ist, ich hab nicht allzu viel Zeit im Moment.

Aber schreib mir doch eine E-Mail mit deiner Mailadresse, dann kann ich dir die Dateien schicken (das Ganze könnte grösser werden...).