<?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[Verhindern, dass Objekt auf stack angelegt wird?]]></title><description><![CDATA[<p>Hallo.<br />
Wie kann ich verhindern, dass ein Objekt auf dem stack erzeugt wird?<br />
Ich hatte mir sowas überlegt (funktioniert aber nicht):</p>
<pre><code>class myclass
{
  friend operator new;
 private:
  myclass();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/230309/verhindern-dass-objekt-auf-stack-angelegt-wird</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 10:14:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230309.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Dec 2008 21:22:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 21:22:25 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Wie kann ich verhindern, dass ein Objekt auf dem stack erzeugt wird?<br />
Ich hatte mir sowas überlegt (funktioniert aber nicht):</p>
<pre><code>class myclass
{
  friend operator new;
 private:
  myclass();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1634871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634871</guid><dc:creator><![CDATA[MagicalFlyingMoron]]></dc:creator><pubDate>Tue, 23 Dec 2008 21:22:25 GMT</pubDate></item><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 21:30:36 GMT]]></title><description><![CDATA[<p>Das Erzeugen selber kannst du eigentlich nicht verhindern. Was du aber tun kannst, ist ein Reference Counter einzubauen, der das Objekt automatisch mit <code>delete</code> freigibt. War es auf dem Stack, kommt es unweigerlich zu einer Zugriffsverletzung.</p>
<p>So kann man Leute zwingen, Objekte auf dem Heap anzulegen. Was das bringen soll, kann ich nicht nachvollziehen *böse zu VCF guck* <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/1634874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634874</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 23 Dec 2008 21:30:36 GMT</pubDate></item><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 21:39:57 GMT]]></title><description><![CDATA[<p>Du musst manuell eine Factory-Funktion bereitstellen. Entweder als statische Methode oder als friend-Funktion. Am besten auch eine Freigabefunktion, dann kannst du dir aussuchen, wie du den Speicher allokierst.</p>
<pre><code class="language-cpp">Foo* foo = create_foo(bar, baz);
foo-&gt;destroy();
// oder:
delete foo; // Wenn du dich auf new/delete festlegen willst.
</code></pre>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634878</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Tue, 23 Dec 2008 21:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 21:53:44 GMT]]></title><description><![CDATA[<p>MagicalFlyingMoron schrieb:</p>
<blockquote>
<p>Hallo.<br />
Wie kann ich verhindern, dass ein Objekt auf dem stack erzeugt wird?</p>
</blockquote>
<p>Wenn ich dies aus irgendeinen Grund brauche, sieht es bei mir meist in etwa wie folgt aus:</p>
<pre><code class="language-cpp">#include &lt;memory&gt; // TR1 Header, bzw. &lt;boost/shared_ptr.hpp&gt; oder vergleichbares

class MyClass
{
    public:
        static std::tr1::shared_ptr&lt;MyClass&gt; Create()
        {
            return std::tr1::shared_ptr&lt;MyClass&gt;(new MyClass);
        };

    private:
        MyClass();
        MyClass(MyClass const &amp;); // Dieser muß auch unterbunden werden...
        // und über den Zuweisungsoperator solltest du dir auch Gedanken machen
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1634885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634885</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 23 Dec 2008 21:53:44 GMT</pubDate></item><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 21:52:22 GMT]]></title><description><![CDATA[<p>An sowas hatt ich auch schon gedacht.<br />
Wollt es eigendlich mit dem new operator machen.<br />
Wenns aber nicht funktioniert ist es auch nicht so schlimm.<br />
Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634886</guid><dc:creator><![CDATA[MagicalFlyingMoron]]></dc:creator><pubDate>Tue, 23 Dec 2008 21:52:22 GMT</pubDate></item><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 21:52:44 GMT]]></title><description><![CDATA[<p>Don06 schrieb:</p>
<blockquote>
<p>Am besten auch eine Freigabefunktion, dann kannst du dir aussuchen, wie du den Speicher allokierst.</p>
</blockquote>
<p>Ich würde sowas von Smartpointern etc. übernehmen lassen. Alles was man separat aufrufen muß, verleitet dazu vergessen zu werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634887</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 23 Dec 2008 21:52:44 GMT</pubDate></item><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 21:55:45 GMT]]></title><description><![CDATA[<p>MagicalFlyingMoron schrieb:</p>
<blockquote>
<p>An sowas hatt ich auch schon gedacht.<br />
Wollt es eigendlich mit dem new operator machen.<br />
Wenns aber nicht funktioniert ist es auch nicht so schlimm.</p>
</blockquote>
<p>Das Problem ist, dass Objekte, die mit <code>new</code> erstellt werden, eigentlich gerade so gut auf dem Stack als automatische Variablen deklariert werden können.</p>
<p>Aus reiner Neugier: Wofür brauchst du das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634888</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 23 Dec 2008 21:55:45 GMT</pubDate></item><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 21:56:38 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14941">@asc</a>:<br />
Das mit dem shared_ptr sieht interessant aus. guck ich mir gleich mal an. Könnt genau das sein was ich brauche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634889</guid><dc:creator><![CDATA[MagicalFlyingMoron]]></dc:creator><pubDate>Tue, 23 Dec 2008 21:56:38 GMT</pubDate></item><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 22:09:57 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Aus reiner Neugier: Wofür brauchst du das?</p>
</blockquote>
<p>Ich wollte in einer Funktion</p>
<pre><code>delete this;
</code></pre>
<p>benutzen. Deswegen darf auf gar keinen Fall ein Objekt auf dem Stack abgelegt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634891</guid><dc:creator><![CDATA[MagicalFlyingMoron]]></dc:creator><pubDate>Tue, 23 Dec 2008 22:09:57 GMT</pubDate></item><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 22:14:39 GMT]]></title><description><![CDATA[<p>Okay. Dass du bei Anweisungen wie <code>delete this;</code> aber vorsichtig sein musst, weisst du, oder? <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>Möglicherweise gibt es auch eine bessere Lösung für das, was du tun willst. Es ist wahrscheinlich auch verwirrend für den Anwender, wenn er das Objekt mit <code>new</code> erstellt, dieses sich aber selber per <code>delete</code> löscht (nur so nebenbei)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634892</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 23 Dec 2008 22:14:39 GMT</pubDate></item><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 22:30:56 GMT]]></title><description><![CDATA[<p>MagicalFlyingMoron schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>Aus reiner Neugier: Wofür brauchst du das?</p>
</blockquote>
<p>Ich wollte in einer Funktion</p>
<pre><code>delete this;
</code></pre>
<p>benutzen. Deswegen darf auf gar keinen Fall ein Objekt auf dem Stack abgelegt werden.</p>
</blockquote>
<p>Dann ist auch der shared_ptr nichts für dich.</p>
<p>Die überlegungen zu &quot;delete this&quot; kenne ich eigentlich nur bei dem anlegen nicht-modaler Fenster...</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634894</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 23 Dec 2008 22:30:56 GMT</pubDate></item><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 22:39:09 GMT]]></title><description><![CDATA[<p>Ist mir schon klar, dass ich mit delete this vorsichtig sein muss.<br />
Ich hab mir das Programm so vorgestellt:</p>
<pre><code>class bar;

class inerface_foo{
  friend class bar;
 protected:
  virtual void message(string&amp; nonsense)=0;
  virtual ~interface_foo();
};
</code></pre>
<p>Wobei irgendeine Funktion von bar in einer großen Schleife message aufruft.<br />
Der &quot;Anwender&quot; soll von interface_foo erben und darf dann mit</p>
<pre><code>if (verarbeite(nonsense)==error)
{
  delete this;
  return;
}
</code></pre>
<p>sein Objekt zerstören.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634896</guid><dc:creator><![CDATA[MagicalFlyingMoron]]></dc:creator><pubDate>Tue, 23 Dec 2008 22:39:09 GMT</pubDate></item><item><title><![CDATA[Reply to Verhindern, dass Objekt auf stack angelegt wird? on Tue, 23 Dec 2008 22:57:23 GMT]]></title><description><![CDATA[<p>Möchtest du die Aufgabe, <code>interface_foo</code> -Instanzen zu zerstören, nicht der Klasse <code>bar</code> übertragen?</p>
<p>Dann könntest du in <code>interface_foo</code> eine <code>bool</code> -Variable als Flag deklarieren, die anzeigt, ob der Zustand gültig ist oder nicht. Oder du gibst direkt der Funktion <code>message()</code> den Rückgabetypen <code>bool</code> . So kann der Aufrufer sehen, ob das Objekt noch weiterexistieren soll. Verstehst du, was ich meine?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634906</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 23 Dec 2008 22:57:23 GMT</pubDate></item></channel></rss>