<?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[vector::back()-Referenz auch nach pop_back gültig?]]></title><description><![CDATA[<p>Ist das hier erlaubt?</p>
<pre><code class="language-cpp">struct pod { int data[256]; }; // Destruktor hat keinen Effekt
vector&lt;pod&gt; v(10);
pod&amp; last = v.back();
v.pop_back();
// mach was mit &quot;last&quot;, lasse &quot;v&quot; in Ruhe
</code></pre>
<p>Die verschiedenen Dokumentationen sagen jeweils etwas anderes.</p>
<p><a href="http://www.cplusplus.com/reference/vector/vector/pop_back/" rel="nofollow">http://www.cplusplus.com/reference/vector/vector/pop_back/</a> -- &quot;reference[s] referring to the removed element are invalidated&quot;<br />
<a href="http://en.cppreference.com/w/cpp/container/vector/pop_back" rel="nofollow">http://en.cppreference.com/w/cpp/container/vector/pop_back</a> -- &quot;No iterators or references are invalidated.&quot;</p>
<p>Aus meiner Sicht dürfte nichts dagegen sprechen, da der Vector den Speicher ja nicht freigeben darf.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318701/vector-back-referenz-auch-nach-pop_back-gültig</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 04:17:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318701.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Jul 2013 12:46:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector::back()-Referenz auch nach pop_back gültig? on Tue, 23 Jul 2013 12:46:05 GMT]]></title><description><![CDATA[<p>Ist das hier erlaubt?</p>
<pre><code class="language-cpp">struct pod { int data[256]; }; // Destruktor hat keinen Effekt
vector&lt;pod&gt; v(10);
pod&amp; last = v.back();
v.pop_back();
// mach was mit &quot;last&quot;, lasse &quot;v&quot; in Ruhe
</code></pre>
<p>Die verschiedenen Dokumentationen sagen jeweils etwas anderes.</p>
<p><a href="http://www.cplusplus.com/reference/vector/vector/pop_back/" rel="nofollow">http://www.cplusplus.com/reference/vector/vector/pop_back/</a> -- &quot;reference[s] referring to the removed element are invalidated&quot;<br />
<a href="http://en.cppreference.com/w/cpp/container/vector/pop_back" rel="nofollow">http://en.cppreference.com/w/cpp/container/vector/pop_back</a> -- &quot;No iterators or references are invalidated.&quot;</p>
<p>Aus meiner Sicht dürfte nichts dagegen sprechen, da der Vector den Speicher ja nicht freigeben darf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340608</guid><dc:creator><![CDATA[begger]]></dc:creator><pubDate>Tue, 23 Jul 2013 12:46:05 GMT</pubDate></item><item><title><![CDATA[Reply to vector::back()-Referenz auch nach pop_back gültig? on Tue, 23 Jul 2013 12:52:51 GMT]]></title><description><![CDATA[<p>Objekte sind mehr als nur Speicher.</p>
<blockquote>
<p>Ist das hier erlaubt?</p>
</blockquote>
<p>Ja, solange du nicht auf last zugreifst. <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>Die verschiedenen Dokumentationen sagen jeweils etwas anderes.</p>
</blockquote>
<p>Und welche von beiden sieht vollstaendiger aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340609</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 23 Jul 2013 12:52:51 GMT</pubDate></item><item><title><![CDATA[Reply to vector::back()-Referenz auch nach pop_back gültig? on Tue, 23 Jul 2013 13:27:49 GMT]]></title><description><![CDATA[<p>Guck mal in den Standard, da siehste ganz schnell wieso das nicht erlaubt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340613</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 23 Jul 2013 13:27:49 GMT</pubDate></item><item><title><![CDATA[Reply to vector::back()-Referenz auch nach pop_back gültig? on Tue, 23 Jul 2013 14:40:50 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Guck mal in den Standard, da siehste ganz schnell wieso das nicht erlaubt ist.</p>
</blockquote>
<p>Du mit deinem Standardgelaber. Als ob das eine Angelegenheit von 'ner Minute waere, wenn man ihn noch nie in der Hand gehabt hat. Schoen, dass du ihn gelesen hast, proll bitte woanders damit! Entweder du zitierst die Stelle oder laesst es!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340639</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 23 Jul 2013 14:40:50 GMT</pubDate></item><item><title><![CDATA[Reply to vector::back()-Referenz auch nach pop_back gültig? on Tue, 23 Jul 2013 15:12:42 GMT]]></title><description><![CDATA[<p>Naja, so &quot;ganz schnell&quot; kann man jetzt nicht sagen. vector::pop_back wird im Standard nicht direkt behandelt, sondern über vector::erase definiert. Ich zitier mal aus C++03:</p>
<p>ISO/IEC 14882:2003 23.1.1 (12) (Table 68) schrieb:</p>
<blockquote>
<pre><code>expression   | return type | operational semantics | container
-------------+-------------+-----------------------+--------------------
(...)        | (...)       | (...)                 | (...)
a.pop_back() | void        | a.erase(--a.end())    | vector, list, deque
</code></pre>
</blockquote>
<p>Und später</p>
<p>ISO/IEC 14882:2003 23.2.4.3 (3) schrieb:</p>
<blockquote>
<pre><code class="language-cpp">iterator erase(iterator position);
iterator erase(iterator first, iterator last);
</code></pre>
<p>Effects: Invalidates all the iterators and references after the point of the erase.</p>
</blockquote>
<p>Dass &quot;after the point of the erase&quot; den Eingabeiterator mit einschließt, ist aus dem Kontext offensichtlich.</p>
<p>Also nein, TEs Vorhaben ist nicht erlaubt, und es sollte mich nicht mal wundern, wenn die ein oder andere Implementation der Standardbibliothek da im Debug-Modus lustige Dinge draus macht. Den invalidierten Speicher mit magischen Zahlen überschreiben, damit der Debugger gleich merken kann, wenn man solchen Unfug treibt, zum Beispiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2340647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2340647</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 23 Jul 2013 15:12:42 GMT</pubDate></item></channel></rss>