<?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[Polymorphie mit smarten Zeigern]]></title><description><![CDATA[<p>Ich versuche Folgendes:</p>
<pre><code class="language-cpp">using namespace boost;

class IA
{
   virtual void helloWorld();
}

class B: public IA
{
   void helloWorld();
}
class C
{
    C(shared_ptr&lt;IA&gt; a);
}

int main
{
  shared_ptr&lt;IA&gt; interfacePtr(new B);
  shared_ptr&lt;B&gt; pointerToB(interfacePtr); // hier gibts natürlich ein Problem
  shared_ptr&lt;C&gt; c(new C(interfacePtr));
}
</code></pre>
<p>Das funktioniert so nicht, denn für den prep sind IA und B ja nicht verwandt.</p>
<p>Ich hab betreffende Zeile nach etwas Recherche in das hier geändert:</p>
<pre><code class="language-cpp">shared_ptr&lt;B&gt; pointerToB(boost::dynamic_pointer_cast&lt;B&gt;(interfacePtr));
</code></pre>
<p>Jetzt bin ich aber mit boost und den shared_ptrn noch nicht so versiert um zu wissen ob das wirklich so geht.<br />
Ist das OK so?</p>
<p>Mit VC++2005 compilierts zumindest.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/246689/polymorphie-mit-smarten-zeigern</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 01:41:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246689.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 Jul 2009 11:08:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Polymorphie mit smarten Zeigern on Fri, 31 Jul 2009 11:11:53 GMT]]></title><description><![CDATA[<p>Ich versuche Folgendes:</p>
<pre><code class="language-cpp">using namespace boost;

class IA
{
   virtual void helloWorld();
}

class B: public IA
{
   void helloWorld();
}
class C
{
    C(shared_ptr&lt;IA&gt; a);
}

int main
{
  shared_ptr&lt;IA&gt; interfacePtr(new B);
  shared_ptr&lt;B&gt; pointerToB(interfacePtr); // hier gibts natürlich ein Problem
  shared_ptr&lt;C&gt; c(new C(interfacePtr));
}
</code></pre>
<p>Das funktioniert so nicht, denn für den prep sind IA und B ja nicht verwandt.</p>
<p>Ich hab betreffende Zeile nach etwas Recherche in das hier geändert:</p>
<pre><code class="language-cpp">shared_ptr&lt;B&gt; pointerToB(boost::dynamic_pointer_cast&lt;B&gt;(interfacePtr));
</code></pre>
<p>Jetzt bin ich aber mit boost und den shared_ptrn noch nicht so versiert um zu wissen ob das wirklich so geht.<br />
Ist das OK so?</p>
<p>Mit VC++2005 compilierts zumindest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1752874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1752874</guid><dc:creator><![CDATA[krxlprnft]]></dc:creator><pubDate>Fri, 31 Jul 2009 11:11:53 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie mit smarten Zeigern on Fri, 31 Jul 2009 12:13:40 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>du versuchst hier ein DownCast zu machen, was nicht implizit funktioniert, denn wer gewährleistet dir denn, dass da auch wirklich die gewünschte abgeleitete Klasse drin steckt.</p>
<pre><code class="language-cpp">// Hier wird versucht, einem B* eine A* zuzuweisen
shared_ptr&lt;B&gt; pointerToB(interfacePtr);
</code></pre>
<p>Die funktioniert nur bei einem UpCast implizit.<br />
Wieso willst du das eigentlich machen ? Polymorphie erreichst du genau auf dem umgekehrten Wege, also in A* B* reinstecken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1752909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1752909</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 31 Jul 2009 12:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie mit smarten Zeigern on Fri, 31 Jul 2009 13:02:20 GMT]]></title><description><![CDATA[<blockquote>
<p>Jetzt bin ich aber mit boost und den shared_ptrn noch nicht so versiert um zu wissen ob das wirklich so geht.<br />
Ist das OK so?</p>
</blockquote>
<p>Mehr oder weniger. Zunächst, wenn du dir nicht sicher bist, solltest du vorher überprüfen, dass der Pointer nicht leer ist, das passiert wenn es sich ursprünglich nicht um ein B gehandelt hat.<br />
Also gehen tuts schon, gut ist es nicht, aber ich habs auch grad gemacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1752955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1752955</guid><dc:creator><![CDATA[JustAnotherNoob]]></dc:creator><pubDate>Fri, 31 Jul 2009 13:02:20 GMT</pubDate></item></channel></rss>