<?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::list, std::vector - Umgang mit Referenzen]]></title><description><![CDATA[<p>Hallo liebe C++ Community,<br />
während der Arbeit an einem kleinen Projekt von mir bin ich auf folgendes Problem gestoßen:</p>
<p>Es existiert eine abstrakte Basisklasse &quot;basis&quot; mit einer rein virtuelle Methode</p>
<pre><code class="language-cpp">class basis {

public:
  void foo() = 0;

};
</code></pre>
<p>Von dieser Klasse werden mehrere andere Klassen mittels public-Vererbung abgeleitet.</p>
<pre><code class="language-cpp">class abgeleitet: public basis {

public:
  void foo() {
    // sommething to do
  }

}
</code></pre>
<p>Es gibt nun mehrere verschiedene abgeleitete Klassen. Nun muss ich diese in einer Liste/Array/o.Ä. speichern. Da die Typerkennung erst zur Laufzeit erfolgen kann habe ich mir überlegt die Instanzen der abgeleiteten Klassen als Referenz in einem Vector zu speichern.</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

...

std::vector&lt;basis&amp;&gt; vSpeicher;
</code></pre>
<p>Dabei erhalte ich jedoch immer Compilerfehlmeldungen</p>
<blockquote>
<p>Microsoft Visual C++ 2008 Express Edition:<br />
1&gt;c:\program files (x86)\microsoft visual studio 9.0\vc\include\xmemory(95) : error C2528: 'pointer': Zeiger auf Verweis ungültig</p>
</blockquote>
<p>Können die Containerklassen std::list und std::vector der STL nicht mit Referenzen umgehen oder liegt das nur daran das die Basisklasse abstrakt ist? Beziehungsweise gibt es eine andere möglichkeit die abgeleiteten Klassen zu speichern?</p>
<p>Mit freundlichen Grüßen<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238858/std-list-std-vector-umgang-mit-referenzen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 17:22:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238858.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Apr 2009 16:57:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::list, std::vector - Umgang mit Referenzen on Thu, 16 Apr 2009 16:57:28 GMT]]></title><description><![CDATA[<p>Hallo liebe C++ Community,<br />
während der Arbeit an einem kleinen Projekt von mir bin ich auf folgendes Problem gestoßen:</p>
<p>Es existiert eine abstrakte Basisklasse &quot;basis&quot; mit einer rein virtuelle Methode</p>
<pre><code class="language-cpp">class basis {

public:
  void foo() = 0;

};
</code></pre>
<p>Von dieser Klasse werden mehrere andere Klassen mittels public-Vererbung abgeleitet.</p>
<pre><code class="language-cpp">class abgeleitet: public basis {

public:
  void foo() {
    // sommething to do
  }

}
</code></pre>
<p>Es gibt nun mehrere verschiedene abgeleitete Klassen. Nun muss ich diese in einer Liste/Array/o.Ä. speichern. Da die Typerkennung erst zur Laufzeit erfolgen kann habe ich mir überlegt die Instanzen der abgeleiteten Klassen als Referenz in einem Vector zu speichern.</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

...

std::vector&lt;basis&amp;&gt; vSpeicher;
</code></pre>
<p>Dabei erhalte ich jedoch immer Compilerfehlmeldungen</p>
<blockquote>
<p>Microsoft Visual C++ 2008 Express Edition:<br />
1&gt;c:\program files (x86)\microsoft visual studio 9.0\vc\include\xmemory(95) : error C2528: 'pointer': Zeiger auf Verweis ungültig</p>
</blockquote>
<p>Können die Containerklassen std::list und std::vector der STL nicht mit Referenzen umgehen oder liegt das nur daran das die Basisklasse abstrakt ist? Beziehungsweise gibt es eine andere möglichkeit die abgeleiteten Klassen zu speichern?</p>
<p>Mit freundlichen Grüßen<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1696789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1696789</guid><dc:creator><![CDATA[Stefan_E]]></dc:creator><pubDate>Thu, 16 Apr 2009 16:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to std::list, std::vector - Umgang mit Referenzen on Thu, 16 Apr 2009 17:03:02 GMT]]></title><description><![CDATA[<p>Du kannst keine Referenzen in Container verwenden, da die Elemente kopiert und zugewiesen werden (und im Weiteren Objekte sein müssen). Nimm stattdessen Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1696793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1696793</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 16 Apr 2009 17:03:02 GMT</pubDate></item><item><title><![CDATA[Reply to std::list, std::vector - Umgang mit Referenzen on Thu, 16 Apr 2009 17:45:57 GMT]]></title><description><![CDATA[<p>Und dann nimm auch Container, die für Zeiger gedacht sind, etwa die aus boost::ptr_container</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1696816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1696816</guid><dc:creator><![CDATA[PhilippM]]></dc:creator><pubDate>Thu, 16 Apr 2009 17:45:57 GMT</pubDate></item><item><title><![CDATA[Reply to std::list, std::vector - Umgang mit Referenzen on Thu, 16 Apr 2009 17:48:28 GMT]]></title><description><![CDATA[<p>Gute Idee. Oder um etwas flexibler zu sein, kann man auch <code>boost::shared_ptr</code> in Standardcontainern verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1696819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1696819</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 16 Apr 2009 17:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to std::list, std::vector - Umgang mit Referenzen on Thu, 16 Apr 2009 17:54:58 GMT]]></title><description><![CDATA[<p>Sind diese Empfehlungen nicht leicht übertrieben? Ich habe auch schon Zeiger gespeichert und wollte kein Ownership übertragen. Und gleich einen boost::shared_ptr mit Referenzzählung? Zuerst sollte man wohl mehr über das Problem an sich erfahren, bevor man die Vorschlaghämmer empfiehlt <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1696825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1696825</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 16 Apr 2009 17:54:58 GMT</pubDate></item><item><title><![CDATA[Reply to std::list, std::vector - Umgang mit Referenzen on Thu, 16 Apr 2009 18:15:32 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Sind diese Empfehlungen nicht leicht übertrieben? Ich habe auch schon Zeiger gespeichert und wollte kein Ownership übertragen.</p>
</blockquote>
<p>In vielen Fällen benutzt man Container aber, um Objekte darin zu speichern. Da mit reinen Objekten keine Polymorphie funktioniert, nimmt man Zeiger. Und damit man sich nicht um deren Freigabe kümmern muss, nimmt man Smart Pointer oder Pointer Container.</p>
<p>Wenn es nur darum geht, nicht-besitzende Verweise in Containern zu halten, hast du Recht. Aber mir scheint das hier nicht der Fall zu sein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1696839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1696839</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 16 Apr 2009 18:15:32 GMT</pubDate></item><item><title><![CDATA[Reply to std::list, std::vector - Umgang mit Referenzen on Thu, 16 Apr 2009 21:27:42 GMT]]></title><description><![CDATA[<p>danke für die vielen Antworten.</p>
<p>Ich werde es mal mit de Smart Pointern aus der boost Bibliothek versuchen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1696931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1696931</guid><dc:creator><![CDATA[Stefan_E]]></dc:creator><pubDate>Thu, 16 Apr 2009 21:27:42 GMT</pubDate></item><item><title><![CDATA[Reply to std::list, std::vector - Umgang mit Referenzen on Thu, 16 Apr 2009 22:36:19 GMT]]></title><description><![CDATA[<p>Wenn du die Flexibilität von <code>shared_ptr</code> nicht brauchst (problemloses Verschieben und Besitz-Teilen), sind Pointer-Container wohl die bessere Wahl, da du dort weniger Overhead (z.B. durch wegfallende Referenzzählung) hast und deine Datenstruktur dadurch womöglich ein wenig schneller ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1696955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1696955</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 16 Apr 2009 22:36:19 GMT</pubDate></item><item><title><![CDATA[Reply to std::list, std::vector - Umgang mit Referenzen on Fri, 17 Apr 2009 12:52:06 GMT]]></title><description><![CDATA[<blockquote>
<p>... nimmt man Zeiger. Und damit man sich nicht um deren Freigabe kümmern muss, nimmt man ...</p>
</blockquote>
<p>Ich dachte immer, dann nimmt man Java. <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/1697242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697242</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 17 Apr 2009 12:52:06 GMT</pubDate></item></channel></rss>