<?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[Vektor insert&#x2F;push_back machen nur eine Kopie, oder??? +prüfen auf ungültigen Speicher]]></title><description><![CDATA[<p>Liege ich richtig damit, dass insert bzw. push_back eines Vectors nur eine Kopie der übergebenen Variable machen???</p>
<p>es muss so sein, da man ein objekt ja vorher erstellt und mit push_back hinzufügt, das objekt am ende der funktion jedoch gelöscht wird:</p>
<pre><code class="language-cpp">std::vector&lt;Thing&gt; vec;
void foo(){
Thing x;
foo.push_back(x);
}// x wird gelöscht
</code></pre>
<p>das führt mich zu einer weiteren Frage: sagen wir, ich habe mehrere Vektoren mit Zeigern. Dabei füge ich denselben Zeiger unterschiedlichen Vektoren hinzu. Somit wurden Kopien dieses Zeigers erstellt, welche auf dasselbe Objekt zeigen. Lösche ich nun das Objekt per delete auf den Pointer in dem einen Vektor, so ist der Pointer in dem anderen Vektor logischer Weise ungültig und zeigt auf etwas, was nicht mehr existiert.</p>
<p>nun zur Preisfrage:<br />
wie finde ich heraus, ob ein Zeiger auf ungültigen Speicher zeigt, bevor ich ihn benutze??? oder muss ich jetzt irgendwie Liste führen???</p>
<p>hoffe ihr könnt mir helfen!<br />
vielen dank!<br />
anchelito</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199283/vektor-insert-push_back-machen-nur-eine-kopie-oder-prüfen-auf-ungültigen-speicher</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 12:53:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199283.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Nov 2007 17:12:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vektor insert&#x2F;push_back machen nur eine Kopie, oder??? +prüfen auf ungültigen Speicher on Fri, 30 Nov 2007 17:12:17 GMT]]></title><description><![CDATA[<p>Liege ich richtig damit, dass insert bzw. push_back eines Vectors nur eine Kopie der übergebenen Variable machen???</p>
<p>es muss so sein, da man ein objekt ja vorher erstellt und mit push_back hinzufügt, das objekt am ende der funktion jedoch gelöscht wird:</p>
<pre><code class="language-cpp">std::vector&lt;Thing&gt; vec;
void foo(){
Thing x;
foo.push_back(x);
}// x wird gelöscht
</code></pre>
<p>das führt mich zu einer weiteren Frage: sagen wir, ich habe mehrere Vektoren mit Zeigern. Dabei füge ich denselben Zeiger unterschiedlichen Vektoren hinzu. Somit wurden Kopien dieses Zeigers erstellt, welche auf dasselbe Objekt zeigen. Lösche ich nun das Objekt per delete auf den Pointer in dem einen Vektor, so ist der Pointer in dem anderen Vektor logischer Weise ungültig und zeigt auf etwas, was nicht mehr existiert.</p>
<p>nun zur Preisfrage:<br />
wie finde ich heraus, ob ein Zeiger auf ungültigen Speicher zeigt, bevor ich ihn benutze??? oder muss ich jetzt irgendwie Liste führen???</p>
<p>hoffe ihr könnt mir helfen!<br />
vielen dank!<br />
anchelito</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413080</guid><dc:creator><![CDATA[anchelito]]></dc:creator><pubDate>Fri, 30 Nov 2007 17:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor insert&#x2F;push_back machen nur eine Kopie, oder??? +prüfen auf ungültigen Speicher on Fri, 30 Nov 2007 18:16:34 GMT]]></title><description><![CDATA[<blockquote>
<p>nun zur Preisfrage:<br />
wie finde ich heraus, ob ein Zeiger auf ungültigen Speicher zeigt, bevor ich ihn benutze???</p>
</blockquote>
<p>Garnicht. Das ist einer der Gründe, warum sich verwaltete Sprachen wie Java und C# steigender Beliebtheit erfreuen :D. Als C++-Programmierer bleibt dir nur die Möglichkeit, die Zuständigkeit für das Löschen des Objekts genau festzulegen, oder, falls dir das absolut nicht gelingt, auf Alternativen wie boost::shared_ptr auszuweichen.</p>
<p>Grüße</p>
<p>Martin</p>
<p>Edit: Achja, mit der Kopie im Vector hast du recht, du kannst das Originalobjekt nach dem einfügen getrost wegschmeißen, es sei denn natürlich, du speicherst nur eine Referenz oder einen Zeiger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413108</guid><dc:creator><![CDATA[JimmydaMage]]></dc:creator><pubDate>Fri, 30 Nov 2007 18:16:34 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor insert&#x2F;push_back machen nur eine Kopie, oder??? +prüfen auf ungültigen Speicher on Fri, 30 Nov 2007 18:17:09 GMT]]></title><description><![CDATA[<p>das ganze klingt sowieso nach schlechtem design.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413110</guid><dc:creator><![CDATA[apfelIchTopf]]></dc:creator><pubDate>Fri, 30 Nov 2007 18:17:09 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor insert&#x2F;push_back machen nur eine Kopie, oder??? +prüfen auf ungültigen Speicher on Fri, 30 Nov 2007 20:12:08 GMT]]></title><description><![CDATA[<p>hallo, danke erst mal für die antworten.</p>
<p>das ich die gültigkeit nicht prüfen kann, habe ich leider auch schon schmerzlich herausgefunden. über boost hatte ich auch nachgedacht, aber ich hab für mein problem eine einfachere lösung gefunden.</p>
<p>@apfelIchTopf<br />
das ich einen Pointer in mehreren Vektoren speichere hat einen guten Grund und passiert nicht aus Versehen. daher gehe ich nicht von schlechtem design 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/1413130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413130</guid><dc:creator><![CDATA[anchelito]]></dc:creator><pubDate>Fri, 30 Nov 2007 20:12:08 GMT</pubDate></item><item><title><![CDATA[Reply to Vektor insert&#x2F;push_back machen nur eine Kopie, oder??? +prüfen auf ungültigen Speicher on Sat, 01 Dec 2007 06:07:23 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10795">@anchelito</a>:<br />
Ich will dir jetzt nix unterstellen, ich kenne dich ja nicht (und deinen Code auch nicht). Nur ... auf die Feststellung &quot;klingt nach schlechtem Design&quot; mit &quot;hat einen Grund&quot; zu antworten... Klar denkst du es hat einen Grund, das heisst aber nicht dass es nicht trotzdem schlechtes Design sein könnte. <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>
<p>Die Fragen die du dir stellen solltest:<br />
* Wann könnte der Fall eintreten dass ein Zeiger auf Objekte X gleichzeitig in vector A und vector B gespeichert ist, und dann Objekt X über den Zeiger in vector A gelöscht wird?<br />
* Was wäre dann das richtige Verhalten, bzw. will ich das Objekt X dann überhaupt schon löschen?<br />
* Wie kann ich dieses richtige Verhalten am besten erreichen?</p>
<p>Der &quot;üblichste&quot; Fall ist denke ich dass man das Objekt garnicht löschen möchte solange noch irgendwo Zeiger existieren.<br />
Wenn du das Objekt doch sofort löschen möchtest obwohl noch ein Zeiger darauf existiert, solltest du dich fragen wieso du überhaupt 2 vektoren von Zeigern hast.</p>
<p>Der Tip boost::shared_ptr ist aber gut. Mit shared_ptr + weak_ptr lassen sich fast alle Fälle abdecken die ich mir so vorstellen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1413228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1413228</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 01 Dec 2007 06:07:23 GMT</pubDate></item></channel></rss>