<?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[Frage: NEW operator ueberladen]]></title><description><![CDATA[<p>Moin,</p>
<p>Ich habe mal eine Frage bezueglich des new und auch des delete operators.</p>
<p>Es geht um folgendes: Ich moechte meine eigene Speicherverwaltung fuer die dynamisch erzeugten Daten erstellen, aber trotzdem noch die Moeglichkeit haben,<br />
auf die alte Speicherverwaltung zugreifen zu koennen.</p>
<p>Wie ich die new und delete operatoren ueberlade ist relativ klar, aber nun zu der eigentlichen Frage: Ist es moeglich, wenn die new und delete Operatoren ueberladen sind, trotzdem noch auf das &quot;alte&quot; new und delete zuzugreifen und wenn ja wie?</p>
<pre><code class="language-cpp">void* operator new(size_t requested_size) {
	if (irgendeineBedingung) {
               // eigene Speicherverwaltung
	       return handler-&gt;allocateMemory(requested_size);
        } 
        // return altes new aufrufen! 
}

void operator delete(void* mem) {

 	handler-&gt;freeMemory(mem);
}

void* operator new[](size_t requested_size) {

	return handler-&gt;allocateMemory(requested_size);
}

void operator delete[](void* mem) {

 	handler-&gt;freeMemory(mem);
}
</code></pre>
<p>Danke schonmal im Voraus!</p>
<p>MfG &amp; Ahoi<br />
sevenWaysToLove</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179282/frage-new-operator-ueberladen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 08:21:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179282.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Apr 2007 06:35:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage: NEW operator ueberladen on Fri, 20 Apr 2007 06:35:04 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>Ich habe mal eine Frage bezueglich des new und auch des delete operators.</p>
<p>Es geht um folgendes: Ich moechte meine eigene Speicherverwaltung fuer die dynamisch erzeugten Daten erstellen, aber trotzdem noch die Moeglichkeit haben,<br />
auf die alte Speicherverwaltung zugreifen zu koennen.</p>
<p>Wie ich die new und delete operatoren ueberlade ist relativ klar, aber nun zu der eigentlichen Frage: Ist es moeglich, wenn die new und delete Operatoren ueberladen sind, trotzdem noch auf das &quot;alte&quot; new und delete zuzugreifen und wenn ja wie?</p>
<pre><code class="language-cpp">void* operator new(size_t requested_size) {
	if (irgendeineBedingung) {
               // eigene Speicherverwaltung
	       return handler-&gt;allocateMemory(requested_size);
        } 
        // return altes new aufrufen! 
}

void operator delete(void* mem) {

 	handler-&gt;freeMemory(mem);
}

void* operator new[](size_t requested_size) {

	return handler-&gt;allocateMemory(requested_size);
}

void operator delete[](void* mem) {

 	handler-&gt;freeMemory(mem);
}
</code></pre>
<p>Danke schonmal im Voraus!</p>
<p>MfG &amp; Ahoi<br />
sevenWaysToLove</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269728</guid><dc:creator><![CDATA[sevenWaysToLove]]></dc:creator><pubDate>Fri, 20 Apr 2007 06:35:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage: NEW operator ueberladen on Fri, 20 Apr 2007 06:37:58 GMT]]></title><description><![CDATA[<p>Scott Meyers Kapitel über new/delete-Überladung durchlesen. *zurückerinner*, kanns eventuell ::new sein?</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269730</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Fri, 20 Apr 2007 06:37:58 GMT</pubDate></item><item><title><![CDATA[Reply to Frage: NEW operator ueberladen on Fri, 20 Apr 2007 06:43:30 GMT]]></title><description><![CDATA[<p>Wenn du die Operatoren global definiert hast, ersetzen sie die Default-Version. Wenn du sie als (statische) Member deiner Klasse hast (besser ist das ;)), gelten sie erstens nur für diese Klasse und ihre Nachkommen und können zweitens über <code>::operator new(...)</code> etc auf die vordefinierten Versionen zugreifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269733</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 20 Apr 2007 06:43:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage: NEW operator ueberladen on Fri, 20 Apr 2007 21:36:27 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Wenn du die Operatoren global definiert hast, ersetzen sie die Default-Version.</p>
</blockquote>
<p>Kann man dadurch nicht auch das Verhalten der boost::shared_pointer, bzw generell Smart-Pointer als Standard definieren? Quasi: 'new' erstellt eine Instanz eines shared_pointer, der wiederum intern das gewünschte Objekt &quot;verwaltet&quot;, mit allen Vorzügen der Smart Pointer.</p>
<p>Wäre dies aus eurer Sicht klug oder weniger geeignet? Immerhin ließen sich dadurch viele Fehler bei der Behandlung von zur Laufzeit initierter Objekte lösen. Weiterhin könnte man danaben auch eine überladene Variante von ::delete anbieten, die den Speicher - wie auch bisher - weiterhin explizit freigibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270304</guid><dc:creator><![CDATA[uwe_guest]]></dc:creator><pubDate>Fri, 20 Apr 2007 21:36:27 GMT</pubDate></item><item><title><![CDATA[Reply to Frage: NEW operator ueberladen on Fri, 20 Apr 2007 21:50:27 GMT]]></title><description><![CDATA[<p>uwe_guest schrieb:</p>
<blockquote>
<p>Kann man dadurch nicht auch das Verhalten der boost::shared_pointer, bzw generell Smart-Pointer als Standard definieren?</p>
</blockquote>
<p>Technisch so nicht möglich und auch nicht sinnvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270306</guid><dc:creator><![CDATA[Mr. N]]></dc:creator><pubDate>Fri, 20 Apr 2007 21:50:27 GMT</pubDate></item><item><title><![CDATA[Reply to Frage: NEW operator ueberladen on Mon, 23 Apr 2007 06:52:52 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>danke für die Antworten!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/201">@Sidewinder</a>: Welches Buch von Scott Meyers meinst du genau?</p>
<p>Also ich kann die Operatoren aus bestimmten Anforderungen leider nur global definieren, sonst würde ich auch eine Basisklasse verwenden ...</p>
<p>MfG<br />
SevenWaysToLove <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/1271485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271485</guid><dc:creator><![CDATA[sevenWaysToLove]]></dc:creator><pubDate>Mon, 23 Apr 2007 06:52:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage: NEW operator ueberladen on Mon, 23 Apr 2007 07:00:56 GMT]]></title><description><![CDATA[<p>Da solltest du lieber dein Design überdenken - der globale operator new wird für ALLE Speicheranforderungen in deinem Programm verwendet, also solltest du schon genau wissen, was du da tust. (Randfrage: Was hast du eigentlich vor?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1271489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271489</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 23 Apr 2007 07:00:56 GMT</pubDate></item><item><title><![CDATA[Reply to Frage: NEW operator ueberladen on Mon, 23 Apr 2007 07:04:14 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15851">@sevenWaysToLove</a>: Effective C++</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1271491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271491</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Mon, 23 Apr 2007 07:04:14 GMT</pubDate></item><item><title><![CDATA[Reply to Frage: NEW operator ueberladen on Mon, 23 Apr 2007 09:29:33 GMT]]></title><description><![CDATA[<p>Schreib dir doch einen placement new.<br />
Da kannst du auch als Argument schön deine &quot;irgendeineBedingung&quot; übergeben und jenachdem dann dein eigens allocate oder globalen op-new aufrufen.<br />
Info: <a href="http://c-plusplus.net/forum/viewtopic-var-p-is-1194067.html#1194067" rel="nofollow">http://c-plusplus.net/forum/viewtopic-var-p-is-1194067.html#1194067</a></p>
<p>Falls das nicht irgendwie dein Design kaputt macht ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1271591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271591</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 23 Apr 2007 09:29:33 GMT</pubDate></item><item><title><![CDATA[Reply to Frage: NEW operator ueberladen on Tue, 24 Apr 2007 01:24:25 GMT]]></title><description><![CDATA[<p>Wenns garnicht anders geht kannst du ::HeapAlloc und ::HeapFree mit dem &quot;::GetProcessHeap()&quot; verwenden.<br />
Würde ich aber nicht, sobald du DLLs verwendest und da Speicher rumreichst (und z.B. woanders löscht als du ihn angefordert hast) macht das &quot;boom&quot;...<br />
Und das kann schnell passieren´, reicht z.B. schon wenn man std::string's oder auch bloss irgendwelche Container rumreicht/returned.</p>
<p>Alles in allem ist das in Windows ein ziemliches Problem den Allocator auszutauschen... was noch dazu schade ist, weil der Default Allocator volle Kanne lahm ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1272106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1272106</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 24 Apr 2007 01:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to Frage: NEW operator ueberladen on Mon, 14 May 2007 09:45:23 GMT]]></title><description><![CDATA[<p>Moin moin,</p>
<p>ist zwar schon ein Weilchen her ...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>: Eine eigene dynamische Speicherverwaltung hinterlegen, die auf dem globalen Speichersegment eines Prozesses abgebildet wird ...</p>
<p>@all: Momentan haben sich die Anforderungen so geändert, dass das Problem<br />
ausgeschlossen werden kann, aber trotzdem danke an alle ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>MfG<br />
sevenWaysToLove</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1284509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284509</guid><dc:creator><![CDATA[sevenWaysToLove]]></dc:creator><pubDate>Mon, 14 May 2007 09:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to Frage: NEW operator ueberladen on Mon, 14 May 2007 16:12:53 GMT]]></title><description><![CDATA[<p>hab zwar keine ahnung wie das genau geht.<br />
aber in form von einer policy klasse geht das relativ hübsch.</p>
<p>hier ein beispiel<br />
(ohne gewähr)</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class new_allocator
{
 public:
  T* operator new() 
  { return ::new T() 
  }

  T* operator new[](size_t num)
  { return ::new T[num];
  }

  void operator delete(T* ptr)
  { ::delete ptr;
  }
  void operator delete[](T* ptr)
  { ::delete [] ptr;
  }
};

template&lt;typename T&gt;
class CustomAllocator
{
 static char* m_Heap[4096];
 static size_t m_Ptr;

 public:
  T* operator new()
  { 
    T* ptr = &amp;m_Heap[m_Ptr];
    m_Ptr += sizeof(this);
    return ptr;
  } 
  T* operator new[](size_t num)
  {
    T* ptr = &amp;m_Heap[m_Ptr];
    m_Ptr += sizeof(this) * num;
    return ptr;
  }
  void operator delete(T* ptr) { }; //do nothing
  void operator delete[](T* ptr) { }; //do nothing
};

template&lt;typename T&gt;
class CustomAllocator::m_Ptr = 0;

template&lt;
 template &lt;typename&gt; allocator = new_allocator
&gt;
class SomeClass : public allocator&lt;SomeClass&gt;
{
 //code in here
};

SomeClass&lt;&gt; a;
SomeClass&lt;CustomAllocator&gt; b;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1284790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284790</guid><dc:creator><![CDATA[inp]]></dc:creator><pubDate>Mon, 14 May 2007 16:12:53 GMT</pubDate></item></channel></rss>