<?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[anonymes shared_ptr Objekt]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>bin bzgl folgndem Code</p>
<pre><code class="language-cpp">using namespace std;

int main()
{
  int* a = new int(1);

  shared_ptr&lt;int&gt;(a);

  cout &lt;&lt; *a &lt;&lt; endl;

  return 0;
}
</code></pre>
<p>und allgemien bzgl. der Erstellung von anonymen std::shared_ptr Objekten verwirrt.<br />
Warum bekomme ich im obigen Code einen Namenskonflikt bzgl &quot;a&quot;?</p>
<p>So wie ich das sehe wird zunächst ein Pointer a deklariert und initialisiert mit dem Wert &quot;1&quot;.<br />
Anschließend wird ein anonymes std::shared_ptr Objekt instanziiert, welches den Pointer &quot;a&quot; kapseln soll.</p>
<p>Das scheint aber nicht richtig zu sein, kann da evtl einer von euch Klarheit schaffen? <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>
<p>Gruß <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/topic/303500/anonymes-shared_ptr-objekt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 11:49:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303500.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 May 2012 17:37:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Tue, 15 May 2012 17:38:26 GMT]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>bin bzgl folgndem Code</p>
<pre><code class="language-cpp">using namespace std;

int main()
{
  int* a = new int(1);

  shared_ptr&lt;int&gt;(a);

  cout &lt;&lt; *a &lt;&lt; endl;

  return 0;
}
</code></pre>
<p>und allgemien bzgl. der Erstellung von anonymen std::shared_ptr Objekten verwirrt.<br />
Warum bekomme ich im obigen Code einen Namenskonflikt bzgl &quot;a&quot;?</p>
<p>So wie ich das sehe wird zunächst ein Pointer a deklariert und initialisiert mit dem Wert &quot;1&quot;.<br />
Anschließend wird ein anonymes std::shared_ptr Objekt instanziiert, welches den Pointer &quot;a&quot; kapseln soll.</p>
<p>Das scheint aber nicht richtig zu sein, kann da evtl einer von euch Klarheit schaffen? <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>
<p>Gruß <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/2211847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211847</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Tue, 15 May 2012 17:38:26 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Tue, 15 May 2012 17:45:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int* a = new int(1); // &lt;--- Variable names a.
  shared_ptr&lt;int&gt;(a);  // &lt;--- Variable namens a.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2211852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211852</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 15 May 2012 17:45:10 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Tue, 15 May 2012 17:50:53 GMT]]></title><description><![CDATA[<p>Ich kenne keine anonymen lokalen Variablen.</p>
<pre><code class="language-cpp">#include &lt;memory&gt;
using namespace std;

int main()
{
  int* (a) = new int(1);//beachte die gleichen Klammern

  shared_ptr&lt;int&gt;(a);

  cout &lt;&lt; *a &lt;&lt; endl;

  return 0;
}
</code></pre>
<pre><code class="language-cpp">#include &lt;memory&gt;
#include &lt;iostream&gt;
using namespace std;

int main()
{
  int* a = new int(1);

  (void)shared_ptr&lt;int&gt;(a);//Zum Ausdruck gemacht, höhö!

  cout &lt;&lt; *a &lt;&lt; endl;

  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2211856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211856</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 15 May 2012 17:50:53 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Tue, 15 May 2012 17:51:00 GMT]]></title><description><![CDATA[<p>Komisch, das stand nirgendswo in C++ von A bis Z.... O.O</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211861</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 15 May 2012 17:51:00 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Tue, 15 May 2012 18:01:12 GMT]]></title><description><![CDATA[<p>Danke für eure Hilfen <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>
<p>Angenommen man hat so etwas</p>
<pre><code class="language-cpp">void inc(std::shared_ptr&lt;int&gt; x)
{
  ++(*x);
}

int main()
{
  int* a = new int(1);  

  inc(std::shared_ptr&lt;int&gt;(a));

  std::cout &lt;&lt; *a &lt;&lt; std::endl;

  return 0;
}
</code></pre>
<p>d.h. man hat ne Funktion &quot;inc&quot; die einen shared_ptr&lt;int&gt; erwartet und den gekapselten wert Inkrementiert.<br />
Hat man nun nur einen &quot;normalen&quot; Pointer wie in Zeile 8 vorliegen und will diesen auch irgendwie an &quot;inc&quot; übergeben, dann wollte ich das so versuchen wie in Zeile 10, das scheint aber nicht zu klappen.<br />
Habt ihr eine Idee wie man so etwas macht?</p>
<p>Gruß <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/2211863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211863</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Tue, 15 May 2012 18:01:12 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Tue, 15 May 2012 18:04:23 GMT]]></title><description><![CDATA[<p>Einfach instanziieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211865</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 15 May 2012 18:04:23 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Tue, 15 May 2012 19:07:18 GMT]]></title><description><![CDATA[<p>MatheStein schrieb:</p>
<blockquote>
<pre><code class="language-cpp">inc(std::shared_ptr&lt;int&gt;(a));
</code></pre>
</blockquote>
<p>Hast du das mal probiert zu kompillieren? Das ist so erlaubt und deklariert keine Variable a.</p>
<p>volkard schrieb:</p>
<blockquote>
<pre><code class="language-cpp">(void)shared_ptr&lt;int&gt;(a);//Zum Ausdruck gemacht, höhö!
</code></pre>
</blockquote>
<p>Es gibt auch noch andere Workarounds:</p>
<pre><code class="language-cpp">(shared_ptr&lt;int&gt;(a)); // Zum Ausdruck gemacht, hähä!
  shared_ptr&lt;int&gt;{a}; // Zum Ausdruck gemacht (C++11-Style), hehe!
</code></pre>
<p>Wer std::shared_ptr verwendest, verwendet auch C++11, daher würde ich die letztere Variante bevorzugen.</p>
<p>Btw <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28870">@MatheStein</a>, ich hoffe du bist dir bewusst, dass dein cout so nicht hingehört?</p>
<pre><code class="language-cpp">int* a = new int(1); // Speicher anfordern
  shared_ptr&lt;int&gt;{a};  // Speicher ownen und freigegeben
  cout &lt;&lt; *a &lt;&lt; endl;  // Kabumm!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2211894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211894</guid><dc:creator><![CDATA[wtfvonabisz]]></dc:creator><pubDate>Tue, 15 May 2012 19:07:18 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Tue, 15 May 2012 19:12:08 GMT]]></title><description><![CDATA[<p>wtfvonabisz schrieb:</p>
<blockquote>
<p>Btw <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28870">@MatheStein</a>, ich hoffe du bist dir bewusst, dass dein cout so nicht hingehört?</p>
<pre><code class="language-cpp">int* a = new int(1); // Speicher anfordern
  shared_ptr&lt;int&gt;{a};  // Speicher ownen und freigegeben
  cout &lt;&lt; *a &lt;&lt; endl;  // Kabumm!
</code></pre>
</blockquote>
<p>Das weiß er und das IST das Problem.<br />
Er hat ein Objekt in einem normalen Zeiger. Will auch nicht da einen shared_ptr verwenden.<br />
Doch eine fremde Funktion will einen shared_ptr übergeben bekommen.<br />
Und ruft er sie auf, kracht es später.<br />
Wie am geschicktesten es lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2211899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211899</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 15 May 2012 19:12:08 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Tue, 15 May 2012 19:19:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int* a = new int(1);
shared_ptr&lt;int&gt;{a,[](int*) {}}; // Eigener Deleter der nichts tut.
std::cout &lt;&lt; *a &lt;&lt; std::endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2211902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2211902</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Tue, 15 May 2012 19:19:13 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Wed, 16 May 2012 06:48:51 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>wtfvonabisz schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Das weiß er und das IST das Problem.<br />
Er hat ein Objekt in einem normalen Zeiger. Will auch nicht da einen shared_ptr verwenden.</p>
</blockquote>
<p>Nee, DAS ist das Problem. Er hat einen besitzenden, nicht-smarten Pointer. Das ist kein guter Stil. Er will sich jetzt einen abbrechen, um um Smartpointer herumzukommen. Das ist schlechter Stil, um schlechten Stil beibehalten zu können. Warum das Ganze??</p>
<pre><code class="language-cpp">int main()
{
  auto a = make_shared&lt;int(1);  

  inc(a);

  std::cout &lt;&lt; *a &lt;&lt; std::endl;
}
</code></pre>
<p>Fertig ist die Laube.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212052</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 16 May 2012 06:48:51 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Wed, 16 May 2012 06:54:42 GMT]]></title><description><![CDATA[<p>Das Problem ist/war, dass ich in einem Objekt meinen this-Zeiger als shared_ptr übergeben musste, habe also so etwas wie</p>
<pre><code class="language-cpp">std::shared_ptr&lt;/* EINE KLASSE */&gt;(this)
</code></pre>
<p>benötigt</p>
<p>Gruß <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/2212057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212057</guid><dc:creator><![CDATA[MatheStein]]></dc:creator><pubDate>Wed, 16 May 2012 06:54:42 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Wed, 16 May 2012 07:36:05 GMT]]></title><description><![CDATA[<p>Möglicherweise möchtest du std::enable_shared_from_this&lt;DeineKlasse&gt; als Basisklasse verwenden. Aber bei dieser sehr dünnen Problembeschreibung deinerseits kann man das nicht mit Sicherheit sagen. Lies mal den vorletzten Punkt des &quot;Du brauchst Hilfe?&quot;-Thread.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212082</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 16 May 2012 07:36:05 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Wed, 16 May 2012 07:45:18 GMT]]></title><description><![CDATA[<p>Vielleicht liegt auch das Problem, dass die Funktion einen shared_ptr verlangt, ohne das sie es muss bzw. rechtfertigt. DAS ist schlechter Stil, aber es ist ja Mode jeden beknackten Zeiger in Smartpointer zu wickeln. Tut nicht Not. Soll so auch nicht gemacht werden. (Siehe Herb Sutter).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212087</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 16 May 2012 07:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Wed, 16 May 2012 07:47:32 GMT]]></title><description><![CDATA[<p>MatheStein schrieb:</p>
<blockquote>
<p>Das Problem ist/war, dass ich in einem Objekt meinen this-Zeiger als shared_ptr übergeben musste, habe also so etwas wie</p>
<pre><code class="language-cpp">std::shared_ptr&lt;/* EINE KLASSE */&gt;(this)
</code></pre>
<p>benötigt</p>
<p>Gruß <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>Du willst allen ernstes deine Klasse, egal ob sie vom Heap allokiert wurde oder nicht, einem shared_ptr übergeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212090</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 16 May 2012 07:47:32 GMT</pubDate></item><item><title><![CDATA[Reply to anonymes shared_ptr Objekt on Wed, 16 May 2012 07:48:21 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Vielleicht liegt auch das Problem, dass die Funktion einen shared_ptr verlangt, ohne das sie es muss bzw. rechtfertigt. DAS ist schlechter Stil, aber es ist ja Mode jeden beknackten Zeiger in Smartpointer zu wickeln. Tut nicht Not. Soll so auch nicht gemacht werden. (Siehe Herb Sutter).</p>
</blockquote>
<p>Jo, könnte gut sein.<br />
<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>Und pumuckl hat mich traurig gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212091</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 16 May 2012 07:48:21 GMT</pubDate></item></channel></rss>