<?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[[delete(t) ptr] mit [void operator delete(void * ptr, T t)] ???]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe mal wieder eine Form-Frage an die C++-Standard-Experten <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>Dass die Operatoren new und delete Sonderformen sind, ist mir ja klar.<br />
Aber ich hätte erwartet, dass es zu einem überladenen new auch ein entsprechendes delete gibt/geben darf. Mein Compiler MSVC kennt das aber nicht.</p>
<p>Die beiden überladenen Operatoren sind:</p>
<pre><code class="language-cpp">void* operator new(size_t sz, MemoryMgr&amp; mgr);
void operator delete(void* ptr, MemoryMgr&amp; mgr);
</code></pre>
<p>Während</p>
<pre><code class="language-cpp">MemoryMgr mgr;
T* ptr = new (mgr) T;
</code></pre>
<p>funktioniert, lässt sich</p>
<pre><code class="language-cpp">delete (mgr) ptr;
</code></pre>
<p>nicht kompilieren ...</p>
<p>Warum ???</p>
<p>Mir bleibt sonst nur die Alternative mit</p>
<pre><code class="language-cpp">ptr-&gt;~T();
operator delete(ptr, mgr);
</code></pre>
<p>aber das finde ich recht unschön. Die new (param) - Syntax hingegen halte ich für annehmbar, während der Operator selbst nur den Speicher besorgt, wird anschließend ganz korrekt der Konstruktor aufgerufen. Genau so ein Schema hätte ich mir von delete (param) für den Destruktor erwartet.</p>
<p>Hat sich schon mal jemand damit beschäftigt und kennt hier eine Lösung? Trägt der Standard für das Verhalten die Schuld oder ist es (mal wieder) der Compiler. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke für eure Eindrücke und Infos zu diesem zugegeben etwas besonderen Thema</p>
<p>lg XOR</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272878/delete-t-ptr-mit-void-operator-delete-void-ptr-t-t</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 14:40:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272878.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Aug 2010 17:47:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [delete(t) ptr] mit [void operator delete(void * ptr, T t)] ??? on Thu, 26 Aug 2010 17:47:15 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe mal wieder eine Form-Frage an die C++-Standard-Experten <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>Dass die Operatoren new und delete Sonderformen sind, ist mir ja klar.<br />
Aber ich hätte erwartet, dass es zu einem überladenen new auch ein entsprechendes delete gibt/geben darf. Mein Compiler MSVC kennt das aber nicht.</p>
<p>Die beiden überladenen Operatoren sind:</p>
<pre><code class="language-cpp">void* operator new(size_t sz, MemoryMgr&amp; mgr);
void operator delete(void* ptr, MemoryMgr&amp; mgr);
</code></pre>
<p>Während</p>
<pre><code class="language-cpp">MemoryMgr mgr;
T* ptr = new (mgr) T;
</code></pre>
<p>funktioniert, lässt sich</p>
<pre><code class="language-cpp">delete (mgr) ptr;
</code></pre>
<p>nicht kompilieren ...</p>
<p>Warum ???</p>
<p>Mir bleibt sonst nur die Alternative mit</p>
<pre><code class="language-cpp">ptr-&gt;~T();
operator delete(ptr, mgr);
</code></pre>
<p>aber das finde ich recht unschön. Die new (param) - Syntax hingegen halte ich für annehmbar, während der Operator selbst nur den Speicher besorgt, wird anschließend ganz korrekt der Konstruktor aufgerufen. Genau so ein Schema hätte ich mir von delete (param) für den Destruktor erwartet.</p>
<p>Hat sich schon mal jemand damit beschäftigt und kennt hier eine Lösung? Trägt der Standard für das Verhalten die Schuld oder ist es (mal wieder) der Compiler. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke für eure Eindrücke und Infos zu diesem zugegeben etwas besonderen Thema</p>
<p>lg XOR</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1944746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1944746</guid><dc:creator><![CDATA[xor]]></dc:creator><pubDate>Thu, 26 Aug 2010 17:47:15 GMT</pubDate></item></channel></rss>