<?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[boost::shared_ptr und this]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte an eine Methode einen this-Zeiger in einem boost-container übergeben. Dafür mache ich derzeit das:</p>
<pre><code class="language-cpp">class klasse;
void methode (boost::shared_ptr&lt;klasse&gt;&amp; reference);

class klasse
{
public:
    klasse () {};
    ~klasse () {};

    void foobar ()
    {
        methode (boost::shared_ptr&lt;klasse&gt;(this));
    }

    void machwas ()
    {
        std::cout &lt;&lt; &quot;asdf&quot; &lt;&lt; std::endl;
    }
};

void methode (boost::shared_ptr&lt;klasse&gt;&amp; reference)
{
    reference-&gt;machwas ();
}

int main ()
{
    klasse instanz;
    instanz.foobar ();
}
</code></pre>
<p>Doch shared_ptr führt am ende ein delete aus, was es natürlich &quot;knallen&quot; lässt.</p>
<p>Jemand eine idee den this-zeiger zu kapseln?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/226997/boost-shared_ptr-und-this</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 09:09:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/226997.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 Nov 2008 13:45:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::shared_ptr und this on Sun, 09 Nov 2008 13:45:57 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte an eine Methode einen this-Zeiger in einem boost-container übergeben. Dafür mache ich derzeit das:</p>
<pre><code class="language-cpp">class klasse;
void methode (boost::shared_ptr&lt;klasse&gt;&amp; reference);

class klasse
{
public:
    klasse () {};
    ~klasse () {};

    void foobar ()
    {
        methode (boost::shared_ptr&lt;klasse&gt;(this));
    }

    void machwas ()
    {
        std::cout &lt;&lt; &quot;asdf&quot; &lt;&lt; std::endl;
    }
};

void methode (boost::shared_ptr&lt;klasse&gt;&amp; reference)
{
    reference-&gt;machwas ();
}

int main ()
{
    klasse instanz;
    instanz.foobar ();
}
</code></pre>
<p>Doch shared_ptr führt am ende ein delete aus, was es natürlich &quot;knallen&quot; lässt.</p>
<p>Jemand eine idee den this-zeiger zu kapseln?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612359</guid><dc:creator><![CDATA[jevuz]]></dc:creator><pubDate>Sun, 09 Nov 2008 13:45:57 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr und this on Sun, 09 Nov 2008 13:49:17 GMT]]></title><description><![CDATA[<p>Für was kapseln?! <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>
<p>EDIT:<br />
Du kannst ansonsten ja auch einen normalen container, wie std::list nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612363</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 09 Nov 2008 13:49:17 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr und this on Sun, 09 Nov 2008 13:52:55 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Für was kapseln?! <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>möchte pointer so weit wie möglich vermeiden. natürlich sieht es auch knuffiger aus <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1612369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612369</guid><dc:creator><![CDATA[jevuz]]></dc:creator><pubDate>Sun, 09 Nov 2008 13:52:55 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr und this on Sun, 09 Nov 2008 13:53:34 GMT]]></title><description><![CDATA[<p>Geht es dir darum, Zeiger auf die Klasse ( <code>this</code> ) in einem Container zu speichern?</p>
<p>Falls ja, ist hier ein roher Zeiger besser, da ja kein Besitz verwaltet werden muss. <code>shared_ptr</code> ist nicht die Universallösung. <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="😉"
    /><br />
Also wie drakon gesagt hat, z.B. mit <code>std::vector</code> :</p>
<pre><code class="language-cpp">std::vector&lt;klasse*&gt; vec;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1612371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612371</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 09 Nov 2008 13:53:34 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr und this on Sun, 09 Nov 2008 13:55:38 GMT]]></title><description><![CDATA[<p>Übergibt halt ne referenze auf deien klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612372</guid><dc:creator><![CDATA[ähh?]]></dc:creator><pubDate>Sun, 09 Nov 2008 13:55:38 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr und this on Sun, 09 Nov 2008 13:57:09 GMT]]></title><description><![CDATA[<p>Einmal &quot;ohne Zeiger&quot;:</p>
<pre><code class="language-cpp">class klasse;
void methode (boost::shared_ptr&lt;klasse&gt;&amp; reference);

class klasse
{
public:
    klasse () {};
    ~klasse () {};

    void foobar ()
    {
        methode (boost::shared_ptr&lt;klasse&gt;(*this));
    }

    void machwas ()
    {
        std::cout &lt;&lt; &quot;asdf&quot; &lt;&lt; std::endl;
    }
};

void methode (klasse&amp; reference)
{
    reference.machwas ();
}

int main ()
{
    klasse instanz;
    instanz.foobar ();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1612374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612374</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 09 Nov 2008 13:57:09 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr und this on Sun, 09 Nov 2008 14:03:44 GMT]]></title><description><![CDATA[<p>Und ich bin der Meinung, es würde auch mit einem shared_ptr gehen, aber dies hier nur als Zusatz. Es scheint mir, du würdest es wirklich besser auf einen anderen Weg lösen. shared_ptr ist keine universelle Lösung!</p>
<pre><code class="language-cpp">struct EmptyDeleter
{
  template&lt;typename T&gt;
  void operator ()(T) { };
};

class Test
{
public:
  void test()
  {
    boost::shared_ptr&lt;Test&gt; ptr(this, EmptyDeleter());
    foo(ptr);
  }
};

void foo(boost::shared_ptr&lt;Test&gt; ptr)
{
}

// ...
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612378</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 09 Nov 2008 14:03:44 GMT</pubDate></item></channel></rss>