<?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[shared_ptr von Basisklasse sicher?]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich habe eine Basisklasse A und einige Subklassen B,C etc die von A erben.</p>
<p>Ist es jetzt gültiger und sicherer Code, wenn ich einen shared_ptr von A anlege und Subklassen da rein stecke?<br />
Also:</p>
<pre><code class="language-cpp">std::tr1::shared_ptr&lt;A&gt; aPtr;
aPtr = new B; 
aPtr = new C;
aPtr-&gt;methode(); // ruft das jetzt C::methode() auf, wenn methode() virtuell ist
</code></pre>
<p>Kann man das so machen? Oder darf ich in aPtr nur auf &quot;new A&quot; zeigen lassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289965/shared_ptr-von-basisklasse-sicher</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 19:44:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289965.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 16 Jul 2011 13:56:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to shared_ptr von Basisklasse sicher? on Sat, 16 Jul 2011 13:56:26 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich habe eine Basisklasse A und einige Subklassen B,C etc die von A erben.</p>
<p>Ist es jetzt gültiger und sicherer Code, wenn ich einen shared_ptr von A anlege und Subklassen da rein stecke?<br />
Also:</p>
<pre><code class="language-cpp">std::tr1::shared_ptr&lt;A&gt; aPtr;
aPtr = new B; 
aPtr = new C;
aPtr-&gt;methode(); // ruft das jetzt C::methode() auf, wenn methode() virtuell ist
</code></pre>
<p>Kann man das so machen? Oder darf ich in aPtr nur auf &quot;new A&quot; zeigen lassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093617</guid><dc:creator><![CDATA[KlausRR]]></dc:creator><pubDate>Sat, 16 Jul 2011 13:56:26 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr von Basisklasse sicher? on Sat, 16 Jul 2011 14:14:34 GMT]]></title><description><![CDATA[<p>Das ist gut so, sofern Polymorphie bei den Klassen korrekt genutzt wurde (für Korrektheit im besonderen der Destruktor).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093620</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 16 Jul 2011 14:14:34 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr von Basisklasse sicher? on Sat, 16 Jul 2011 17:17:49 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Das ist gut so, sofern Polymorphie bei den Klassen korrekt genutzt wurde (für Korrektheit im besonderen der Destruktor).</p>
</blockquote>
<p>Virtuelle Destruktoren sind für <code>shared_ptr</code> nicht einmal nötig, wenn dieser mit dem dynamischen Typen des Objekts initialisiert wird. Es ist dennoch empfehlenswert, bei polymorpher Verwendung den Destruktor virtuell zu machen, besonders wenn Objekte der Klasse nicht nur in <code>shared_ptr</code> s gehalten werden.</p>
<p>KlausRR schrieb:</p>
<blockquote>
<p>Kann man das so machen?</p>
</blockquote>
<p>Ja. Im Bezug auf Polymorphie verhält sich <code>shared_ptr&lt;A&gt;</code> nahezu gleich wie <code>A*</code> . Statt des Zuweisungsoperators müsstest du allerdings <code>reset()</code> verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093661</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 16 Jul 2011 17:17:49 GMT</pubDate></item></channel></rss>