<?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[Ist shared_ptr&amp;lt;int&amp;gt; foo(new int(0)) exceptionsicher?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hab mal eine kurze Nachfrage.<br />
Ist</p>
<pre><code class="language-cpp">shared_ptr&lt;int&gt; foo(new int(0));
</code></pre>
<p>exceptionsicher?<br />
Also nach meiner Interpretation wird für den int Speicher alloziiert und dann für den Reference Counter im shared_pointer. Wenn die zweite Allocation fehlschlägt, hat man ein Memory leak...</p>
<p>make_shared macht laut msdn nur eine Speicher-Allokation:<br />
<a href="http://msdn.microsoft.com/en-us/library/ee410595.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ee410595.aspx</a></p>
<p>Aber im Bereich Why use this make_shared instead of operator new? steht nichts von zusätzlicher Exceptionsicherheit...</p>
<p>Ist der Code von oben exceptionsicher?</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/292812/ist-shared_ptr-lt-int-gt-foo-new-int-0-exceptionsicher</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 15:41:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/292812.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 18 Sep 2011 14:09:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ist shared_ptr&amp;lt;int&amp;gt; foo(new int(0)) exceptionsicher? on Sun, 18 Sep 2011 14:09:22 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hab mal eine kurze Nachfrage.<br />
Ist</p>
<pre><code class="language-cpp">shared_ptr&lt;int&gt; foo(new int(0));
</code></pre>
<p>exceptionsicher?<br />
Also nach meiner Interpretation wird für den int Speicher alloziiert und dann für den Reference Counter im shared_pointer. Wenn die zweite Allocation fehlschlägt, hat man ein Memory leak...</p>
<p>make_shared macht laut msdn nur eine Speicher-Allokation:<br />
<a href="http://msdn.microsoft.com/en-us/library/ee410595.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ee410595.aspx</a></p>
<p>Aber im Bereich Why use this make_shared instead of operator new? steht nichts von zusätzlicher Exceptionsicherheit...</p>
<p>Ist der Code von oben exceptionsicher?</p>
<p>Gruß,<br />
XSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120823</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 18 Sep 2011 14:09:22 GMT</pubDate></item><item><title><![CDATA[Reply to Ist shared_ptr&amp;lt;int&amp;gt; foo(new int(0)) exceptionsicher? on Sun, 18 Sep 2011 14:33:43 GMT]]></title><description><![CDATA[<p>Wenn der ctor eine Exception wirft, ruft er vorher delete auf den übergebenen Zeiger auf. Ich hab jetzt kein Chapter&amp;Verse, es erscheint mir nur logisch und kurzes Googeln durch die boost-Doku zeigt mir, dass ich vermutlich recht habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2120833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120833</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Sun, 18 Sep 2011 14:33:43 GMT</pubDate></item><item><title><![CDATA[Reply to Ist shared_ptr&amp;lt;int&amp;gt; foo(new int(0)) exceptionsicher? on Sun, 18 Sep 2011 14:42:38 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>ich hab mal eine kurze Nachfrage. Ist</p>
<pre><code class="language-cpp">shared_ptr&lt;int&gt; foo(new int(0));
</code></pre>
<p>exceptionsicher?</p>
</blockquote>
<p>Ja. Wenn da irgend eine Ausnahme bei fliegt (im Konstruktor von shared_ptr), dann wird der Heap-allozierte int hier garantiert gelöscht. Habe ich eben gerade nachgeguckt (§20.7.2.2.1 [util.smartptr.shared.const])</p>
<p>Außer der Performanz (nur eine Allozierung statt zwei) bietet make_shared aber trotzdem eine höhere Ausnahmesicherheit.</p>
<pre><code class="language-cpp">void func(shared_ptr&lt;foo&gt;, shared_ptr&lt;bar&gt;);

int main() {
  // schlecht, nicht Ausnahme-sicher
  func(shared_ptr&lt;foo&gt;(new foo),shared_ptr&lt;bar&gt;(new bar));
  // Warum? Weil die einzelnen Zeiger nicht sofort den
  // shared_ptrs übergeben werden müssen. Die Reihenfolge
  // bei dem, was hier passiert, ist unspezifiziert. Bevor
  // der erste Zeiger dem ersten shared_ptr übergeben wird
  // könnte schon der zweite new-Ausdruck ausgeführt werden,
  // welcher mit einer Ausnahme abbrechen könnte ==&gt;
  // Speicherleck

  // Die Lösung:
  func(make_shared&lt;foo&gt;(), make_shared&lt;bar&gt;());

  // Alternativ:
  shared_ptr&lt;foo&gt; pf (new foo);
  shared_ptr&lt;bar&gt; pb (new bar);
  func(pf,pb);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2120836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120836</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 18 Sep 2011 14:42:38 GMT</pubDate></item><item><title><![CDATA[Reply to Ist shared_ptr&amp;lt;int&amp;gt; foo(new int(0)) exceptionsicher? on Sun, 18 Sep 2011 15:34:10 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Außer der Performanz (nur eine Allozierung statt zwei) bietet make_shared aber trotzdem eine höhere Ausnahmesicherheit.</p>
<pre><code class="language-cpp">void func(shared_ptr&lt;foo&gt;, shared_ptr&lt;bar&gt;);

int main() {
  // schlecht, nicht Ausnahme-sicher
  func(shared_ptr&lt;foo&gt;(new foo),shared_ptr&lt;bar&gt;(new bar));
  // Warum? Weil die einzelnen Zeiger nicht sofort den
  // shared_ptrs übergeben werden müssen. Die Reihenfolge
  // bei dem, was hier passiert, ist unspezifiziert. Bevor
  // der erste Zeiger dem ersten shared_ptr übergeben wird
  // könnte schon der zweite new-Ausdruck ausgeführt werden,
  // welcher mit einer Ausnahme abbrechen könnte ==&gt;
  // Speicherleck

  // Die Lösung:
  func(make_shared&lt;foo&gt;(), make_shared&lt;bar&gt;());

  // Alternativ:
  shared_ptr&lt;foo&gt; pf (new foo);
  shared_ptr&lt;bar&gt; pb (new bar);
  func(pf,pb);
}
</code></pre>
</blockquote>
<p>Danke krümelkacker! Wie im anderen Thread schon erwähnt, man ist sich dessen manchmal nicht bewußt, obwohl man es eigentlich weiß <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2120869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2120869</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 18 Sep 2011 15:34:10 GMT</pubDate></item></channel></rss>