<?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[Im Konstruktor feststellen, ob per operator new erzeugt?]]></title><description><![CDATA[<p>Abent. Titel ist Programm^^ Geht das von Haus aus oder muss ich dazu operator new/delete überladen und wenn ja, wie mache ich das am besten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/212261/im-konstruktor-feststellen-ob-per-operator-new-erzeugt</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 15:43:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/212261.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 May 2008 20:47:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Im Konstruktor feststellen, ob per operator new erzeugt? on Sat, 03 May 2008 20:47:30 GMT]]></title><description><![CDATA[<p>Abent. Titel ist Programm^^ Geht das von Haus aus oder muss ich dazu operator new/delete überladen und wenn ja, wie mache ich das am besten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502802</guid><dc:creator><![CDATA[Ghimbharth]]></dc:creator><pubDate>Sat, 03 May 2008 20:47:30 GMT</pubDate></item><item><title><![CDATA[Reply to Im Konstruktor feststellen, ob per operator new erzeugt? on Sat, 03 May 2008 20:50:48 GMT]]></title><description><![CDATA[<p>Ghimbharth schrieb:</p>
<blockquote>
<p>Abent. Titel ist Programm^^ Geht das von Haus aus oder muss ich dazu operator new/delete überladen und wenn ja, wie mache ich das am besten?</p>
</blockquote>
<p>Ich glaub das geht so von Haus aus nicht.<br />
Gib doch die Info dem Constructor per bool weiter? Was magst du denn machen? <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/1502806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502806</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sat, 03 May 2008 20:50:48 GMT</pubDate></item><item><title><![CDATA[Reply to Im Konstruktor feststellen, ob per operator new erzeugt? on Sat, 03 May 2008 21:12:27 GMT]]></title><description><![CDATA[<p>Pigeon schrieb:</p>
<blockquote>
<p>Gib doch die Info dem Constructor per bool weiter? Was magst du denn machen? <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>Naja die Idee mit dem Konstruktor entspricht eben genau dem, was ich vermeiden wollte. Oder besser gesagt ist es gar nicht möglich, da es sich sowieso um den Konstruktor einer abstrakten Basisklasse handelt. Der genaue Verwendungszweck wäre schwer und zeitintensiv zu erklären, also lasse ich das mal schön bleiben <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>Wenn ich nun also oeprator new/delete für diese Basisklasse überlade, dann werden diese operatoren für die abgeleiteten Klassen ebenfalls benutzt. (?) Wenn ich nun ein globales bool Feld benutze, welches ich im operator new auf true setze, im Konstruktor abfrage und immer auf false setze, dann kann ich theoretisch herausfinden, ob das Objekt per new allokiert wurde oder nicht. (?) Dieser Lösungsansatz geht den Bach ab, sobald mehrere Threads verwendet werden. (?)</p>
<p>Stimmen meine Überlegungen soweit? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502822</guid><dc:creator><![CDATA[Ghimbharth]]></dc:creator><pubDate>Sat, 03 May 2008 21:12:27 GMT</pubDate></item><item><title><![CDATA[Reply to Im Konstruktor feststellen, ob per operator new erzeugt? on Sat, 03 May 2008 21:24:04 GMT]]></title><description><![CDATA[<p>Ghimbharth schrieb:</p>
<blockquote>
<p>Der genaue Verwendungszweck wäre schwer und zeitintensiv zu erklären, also lasse ich das mal schön bleiben...</p>
</blockquote>
<p>Um dir helfen zu können, sollte man auch wissen ob es vielleicht (bessere) Alternativen gibt.</p>
<p>Ghimbharth schrieb:</p>
<blockquote>
<p>Stimmen meine Überlegungen soweit? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Ich würde von diesen Entwurf lieber den Finger lassen, und lieber die Konstruktion kontrollieren (Thema Factorymethoden, privater Konstruktor...).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502825</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sat, 03 May 2008 21:24:04 GMT</pubDate></item><item><title><![CDATA[Reply to Im Konstruktor feststellen, ob per operator new erzeugt? on Sat, 03 May 2008 21:31:09 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Ich würde von diesen Entwurf lieber den Finger lassen, und lieber die Konstruktion kontrollieren (Thema Factorymethoden, privater Konstruktor...).</p>
<p>cu André</p>
</blockquote>
<p>Ist sowas brauchbar? <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="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<pre><code class="language-cpp">struct iWannaBeNew
{
	iWannaBeNew(bool = false);

	static void* operator new(size_t size);

	void doSthVeryIngenious() { cout &lt;&lt; &quot;Ich wurde genewt!! :-)&quot; &lt;&lt; endl; }
};

iWannaBeNew::iWannaBeNew(bool allocatedWithNew){
	if(allocatedWithNew){
		doSthVeryIngenious();
	}
}

void* iWannaBeNew::operator new(size_t size)
{
	return ::new iWannaBeNew(true);
}

int main()
{
	iWannaBeNew* winner = new iWannaBeNew;
	iWannaBeNew  looser;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1502829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502829</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sat, 03 May 2008 21:31:09 GMT</pubDate></item><item><title><![CDATA[Reply to Im Konstruktor feststellen, ob per operator new erzeugt? on Sat, 03 May 2008 21:37:43 GMT]]></title><description><![CDATA[<p>Pigeon schrieb:</p>
<blockquote>
<p>Ist sowas brauchbar? <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="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Ich würde so etwas aus QS-Sicht nicht zulassen...<br />
Die Gefahr bei deiner Methode ist, das sie einfach missbraucht werden kann (Gute Schnittstellen vermeiden die Möglichkeit eines falschen Aufrufes soweit möglich).</p>
<p>Was wäre den wenn ich deine struct wie folgt verwende:</p>
<pre><code class="language-cpp">//...
int main()
{
  iWannaBeNew undNun(true);
}
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502831</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sat, 03 May 2008 21:37:43 GMT</pubDate></item><item><title><![CDATA[Reply to Im Konstruktor feststellen, ob per operator new erzeugt? on Sat, 03 May 2008 21:43:09 GMT]]></title><description><![CDATA[<p>Eine Möglichkeit wäre es die Konstruktion wie gesagt zu kontrollieren (z.B. new zu erzwingen):</p>
<pre><code class="language-cpp">class A
{
  private:
    A() {}

  public:
    static A* Create()
    {
      return new A();
    }
};
</code></pre>
<p>Wobei ich solche Konstrukte eigentlich nur mit Smartpointern einsetze (z.B. boost::shared_ptr).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502835</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sat, 03 May 2008 21:43:09 GMT</pubDate></item><item><title><![CDATA[Reply to Im Konstruktor feststellen, ob per operator new erzeugt? on Sun, 04 May 2008 10:25:40 GMT]]></title><description><![CDATA[<p>&quot;new&quot; zu erzwingen ist leicht, indem man den ctor private macht, wie asc das gezeigt hat. &quot;new&quot; zu verbieten ist IMO nicht möglich. vor allem kann man immer folgendes machen:</p>
<pre><code class="language-cpp">class no_new
{
    // some magic that prevents the use of new
};

class stupid_trickery
{
public:
    no_new m_got_you;
};

void foo()
{
    stupid_trickery* p = new stupid_trickery();
    p-&gt;m_got_you;
}
</code></pre>
<p>genausowenig kenne ich eine möglichkeit im ctor herauszufinden ob ein objekt mittels new oder static/auto angelegt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502967</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 04 May 2008 10:25:40 GMT</pubDate></item><item><title><![CDATA[Reply to Im Konstruktor feststellen, ob per operator new erzeugt? on Sun, 04 May 2008 11:13:22 GMT]]></title><description><![CDATA[<p>Ich rezitiere mal ein paar kleine Buchausschnitte (Nachdem ich die Stelle gefunden habe... Hatte bei dem Thread ein Dejavu):</p>
<p>Mehr effektiv C++ Programmieren; Scott Meyer; Addison Wesley Verlag schrieb:</p>
<blockquote>
<p>(aus: Reichtlinie 27)<br />
...Die traurige Wahrheit ist, das es keinen portablen Weg gibt, um zu bestimmen, ob ein Objekt auf dem Heap ist; es gibt nicht einmal einen halbportablen Weg, der die meiste Zeit funktioniert...</p>
</blockquote>
<p>Heapbasierte Objekte kann man mit einigen Einschränkungen (umfasst Teilweise auch die Basisklassen und wie schon von hustbaer erwähnt Objekte die die Klasse als Member beinhalten) schon auch verhindern. Hierzu verweise ich auf das gleiche Buch (Richtlinie 28).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502990</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sun, 04 May 2008 11:13:22 GMT</pubDate></item><item><title><![CDATA[Reply to Im Konstruktor feststellen, ob per operator new erzeugt? on Sun, 04 May 2008 12:07:05 GMT]]></title><description><![CDATA[<p>Ich bin zu faul nachzuschauen, was Richtlinie 28 besagt, aber man kann natürlich einfach 'operator new' private deklarieren und nicht definieren. Nur: einen wirklichen Nutzen sehe ich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1503028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1503028</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 04 May 2008 12:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to Im Konstruktor feststellen, ob per operator new erzeugt? on Sun, 04 May 2008 12:11:14 GMT]]></title><description><![CDATA[<p>sieht mir nach der Lösung eines Problemes aus, dass man garnicht lösen müsste, wenn man ein ordentliches Design hätte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1503037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1503037</guid><dc:creator><![CDATA[hmmmm]]></dc:creator><pubDate>Sun, 04 May 2008 12:11:14 GMT</pubDate></item></channel></rss>