<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Eigene Speicherallokation II]]></title><description><![CDATA[<p>Hallo zusammen,<br />
Vor einiger Zeit habe ich einen <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-226463.html" rel="nofollow">Thread</a> zu einem ähnlichen Thema eröffnet.</p>
<p>Ich möchte eine Klasse schreiben, die alle Speicheranforderungen und -freigaben über <code>new</code> und <code>delete</code> kontrolliert, 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 ja <code>new</code> und <code>delete</code> bereits überladen werden. Dabei bin ich mich noch nicht sicher, wie ich die Allokator-Methoden implementieren soll.</p>
<p>Ich habe eine solche Memory-Kontrollklasse bereits einmal programmiert, allerdings ohne STL und mit ziemlichem C-Gefrickel. Damals habe ich <code>operator new</code> und <code>operator delete</code> überladen, indem ich intern die C-Funktionen <code>malloc()</code> und <code>free()</code> 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:</p>
<ul>
<li>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).</li>
<li><code>operator new</code> kann ich nicht mehr verwenden, um Speicher zu allokieren, da diese Funktion bereits global überladen wurde. Sie ist nämlich Bestandteil der Speicherkontrolle.</li>
<li>Gleiches gilt für <code>operator delete</code> , um eine Deallokation durchzuführen.</li>
</ul>
<p>Wie gehe ich das am besten an? Sind <code>malloc()</code> und <code>free()</code> legitim, wenn man die Objekte mit Placement New konstruiert und mit manuellem Destruktoraufruf destruiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/229012/eigene-speicherallokation-ii</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 01:44:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/229012.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 05 Dec 2008 20:46:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eigene Speicherallokation II on Fri, 05 Dec 2008 20:46:23 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
Vor einiger Zeit habe ich einen <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-226463.html" rel="nofollow">Thread</a> zu einem ähnlichen Thema eröffnet.</p>
<p>Ich möchte eine Klasse schreiben, die alle Speicheranforderungen und -freigaben über <code>new</code> und <code>delete</code> kontrolliert, 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 ja <code>new</code> und <code>delete</code> bereits überladen werden. Dabei bin ich mich noch nicht sicher, wie ich die Allokator-Methoden implementieren soll.</p>
<p>Ich habe eine solche Memory-Kontrollklasse bereits einmal programmiert, allerdings ohne STL und mit ziemlichem C-Gefrickel. Damals habe ich <code>operator new</code> und <code>operator delete</code> überladen, indem ich intern die C-Funktionen <code>malloc()</code> und <code>free()</code> 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:</p>
<ul>
<li>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).</li>
<li><code>operator new</code> kann ich nicht mehr verwenden, um Speicher zu allokieren, da diese Funktion bereits global überladen wurde. Sie ist nämlich Bestandteil der Speicherkontrolle.</li>
<li>Gleiches gilt für <code>operator delete</code> , um eine Deallokation durchzuführen.</li>
</ul>
<p>Wie gehe ich das am besten an? Sind <code>malloc()</code> und <code>free()</code> legitim, wenn man die Objekte mit Placement New konstruiert und mit manuellem Destruktoraufruf destruiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1625996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1625996</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 05 Dec 2008 20:46:23 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Speicherallokation II on Fri, 05 Dec 2008 21:05:05 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Wie gehe ich das am besten an? Sind <code>malloc()</code> und <code>free()</code> legitim, wenn man die Objekte mit Placement New konstruiert und mit manuellem Destruktoraufruf destruiert?</p>
</blockquote>
<p>Ja, malloc und free bieten sich definitiv an. Einen simplen Allokator für std-Container findest du <a href="http://www.josuttis.com/libbook/memory/myalloc.hpp.html" rel="nofollow">hier</a>, hab ich vor einer knappen Stunde selbst erst gesucht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>edit: In dem Allokator aus dem Link musst du halt noch &quot;::operator new&quot; und &quot;::operator delete&quot; durch malloc bzw free ersetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626004</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 05 Dec 2008 21:05:05 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Speicherallokation II on Sat, 06 Dec 2008 01:59:17 GMT]]></title><description><![CDATA[<p>Es ist ja nicht so, dass malloc und free grundsätzlich &quot;böse&quot; 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.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626033</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 06 Dec 2008 01:59:17 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Speicherallokation II on Sat, 06 Dec 2008 10:07:26 GMT]]></title><description><![CDATA[<p>Nexus, veröffenlichst du das, wenn's fertig ist? Ich wäre jedenfalls interessiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626090</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 06 Dec 2008 10:07:26 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Speicherallokation II on Sat, 06 Dec 2008 11:26:05 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Nexus, veröffenlichst du das, wenn's fertig ist? Ich wäre jedenfalls interessiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Es wird wahrscheinlich noch ein wenig dauern, bis es fertig ist, ich hab nicht allzu viel Zeit im Moment. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Aber schreib mir doch eine E-Mail mit deiner Mailadresse, dann kann ich dir die Dateien schicken (das Ganze könnte grösser werden...).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1626106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1626106</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 06 Dec 2008 11:26:05 GMT</pubDate></item></channel></rss>