<?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[std::vector als &amp;quot;behaelter&amp;quot; für std::vector]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>Würde folgender Code zu einem Speicherleck führen?</p>
<p>std::vector&lt;std::vector&lt;int&gt; &gt; A;</p>
<p>std::vector&lt;int&gt;* p_element = new std::vector&lt;int&gt;(1);<br />
(*p_element)[0] = 42;</p>
<p>A.push_back(*p_element);</p>
<p>/* Meine Annahme ist, dass im Folgenden zuerst die Destruktoren<br />
der std::vector-Elemente von A aufgerufen werden und danach<br />
der Destruktor von A. Da ich oben keinen Zeiger auf eine<br />
std::vector-Instanz abspeichere, sondern die Instanz selber,<br />
sollte es doch so ablaufen, oder nicht? */</p>
<p>A.clear();</p>
<p>Gruß<br />
reg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/278726/std-vector-als-quot-behaelter-quot-für-std-vector</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 02:16:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278726.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Dec 2010 23:35:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::vector als &amp;quot;behaelter&amp;quot; für std::vector on Sat, 11 Dec 2010 23:35:33 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>Würde folgender Code zu einem Speicherleck führen?</p>
<p>std::vector&lt;std::vector&lt;int&gt; &gt; A;</p>
<p>std::vector&lt;int&gt;* p_element = new std::vector&lt;int&gt;(1);<br />
(*p_element)[0] = 42;</p>
<p>A.push_back(*p_element);</p>
<p>/* Meine Annahme ist, dass im Folgenden zuerst die Destruktoren<br />
der std::vector-Elemente von A aufgerufen werden und danach<br />
der Destruktor von A. Da ich oben keinen Zeiger auf eine<br />
std::vector-Instanz abspeichere, sondern die Instanz selber,<br />
sollte es doch so ablaufen, oder nicht? */</p>
<p>A.clear();</p>
<p>Gruß<br />
reg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993133</guid><dc:creator><![CDATA[reg_now]]></dc:creator><pubDate>Sat, 11 Dec 2010 23:35:33 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector als &amp;quot;behaelter&amp;quot; für std::vector on Sat, 11 Dec 2010 23:46:13 GMT]]></title><description><![CDATA[<p>std::vector speichert Kopien, keine Referenzen. p_element wird auf diese Weise speichergeleckt; seine Kopie, die von A gehalten wird, wird ordnungsgemäß zerstört.</p>
<p>Allerdings kannst du Folgendes machen:</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;int&gt; &gt; A;
std::vector&lt;int&gt; p_element;

p_element.push_back(42);
A.push_back(p_element);
</code></pre>
<p>Natürlich ginge auch einfach</p>
<pre><code class="language-cpp">std::vector&lt;std::vector&lt;int&gt; &gt; A(1);
A[0].push_back(42);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1993135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993135</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 11 Dec 2010 23:46:13 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector als &amp;quot;behaelter&amp;quot; für std::vector on Sun, 12 Dec 2010 08:25:05 GMT]]></title><description><![CDATA[<p>Hallo seldon,</p>
<p>Ich wusste gar nicht, dass std::vector Kopien anderer Objekte macht. Aber in meinem Programm hat es nun tatsächlich auch ohne Zeiger und new() funktioniert. Dadurch vereinfacht sich auch der Code und wird übersichtlicher.</p>
<p>Vielen Dank!</p>
<p>Gruß<br />
reg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993157</guid><dc:creator><![CDATA[reg_now]]></dc:creator><pubDate>Sun, 12 Dec 2010 08:25:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector als &amp;quot;behaelter&amp;quot; für std::vector on Sun, 12 Dec 2010 12:42:34 GMT]]></title><description><![CDATA[<p>Du solltest manuelle Speicherverwaltung so oft wie möglich vermeiden. Sie ist nur selten wirklich nötig, und die dadurch entstehenden Probleme lohnen sich einfach nicht. Gerade wenn C++ bessere Techniken wie <a href="http://de.wikipedia.org/wiki/RAII" rel="nofollow">RAII</a> bietet.</p>
<p>Falls du doch einmal Zeiger in Containern brauchst (z.B. wegen Polymorphie oder nicht-kopierbaren Objekten), könntest du dir überlegen, die Bibliothek <a href="http://www.boost.org/doc/libs/1_45_0/libs/ptr_container/doc/ptr_container.html" rel="nofollow"><em>Boost.PointerContainers</em></a> anzuschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1993265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1993265</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 12 Dec 2010 12:42:34 GMT</pubDate></item></channel></rss>