<?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[void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer);]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Ich habe jetzt schon an verschiedenen Orten (unter anderem in der MSDN) gelesen, dass man, wenn man einen Pointer zu void* konvertieren will, dynamic_cast verwenden soll. Doch ich habe bisher noch nirgends gelesen, wieso?</p>
<p>Und noch ein zweite ähnliche Frage einfach in die verkehrte Richtung. Gibt es eigentlich eine Möglichkeit eine Art von dynamic_cast auf einen void-Zeiger anzuwenden. Siehe Codebeispiel, Teil 2.</p>
<pre><code class="language-cpp">// Teil 1:
CBase* pBase = new CBase();
void* pVoid = pBase; // Geht ohne Probs
// vorgeschlagen wird aber:
// void* pVoid = dynamic_cast&lt;void*&gt;(pBase);

// Teil 2:
pBase = dynamic_cast&lt;CBase*&gt;(pVoid); // Ergibt einen Fehler.
// Gibt es nicht sowas trotzdem? Also, dass man einen void-Zeiger
// auf den Typ prüfen kann?
</code></pre>
<p>Danke für die Hilfe.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/156421/void-p-dynamic_cast-lt-void-gt-pointer</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 21:33:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/156421.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Aug 2006 14:30:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Wed, 16 Aug 2006 14:30:49 GMT]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Ich habe jetzt schon an verschiedenen Orten (unter anderem in der MSDN) gelesen, dass man, wenn man einen Pointer zu void* konvertieren will, dynamic_cast verwenden soll. Doch ich habe bisher noch nirgends gelesen, wieso?</p>
<p>Und noch ein zweite ähnliche Frage einfach in die verkehrte Richtung. Gibt es eigentlich eine Möglichkeit eine Art von dynamic_cast auf einen void-Zeiger anzuwenden. Siehe Codebeispiel, Teil 2.</p>
<pre><code class="language-cpp">// Teil 1:
CBase* pBase = new CBase();
void* pVoid = pBase; // Geht ohne Probs
// vorgeschlagen wird aber:
// void* pVoid = dynamic_cast&lt;void*&gt;(pBase);

// Teil 2:
pBase = dynamic_cast&lt;CBase*&gt;(pVoid); // Ergibt einen Fehler.
// Gibt es nicht sowas trotzdem? Also, dass man einen void-Zeiger
// auf den Typ prüfen kann?
</code></pre>
<p>Danke für die Hilfe.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118450</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 16 Aug 2006 14:30:49 GMT</pubDate></item><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Wed, 16 Aug 2006 14:41:23 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">dynamic_cast&lt;void*&gt;
</code></pre>
<p>sollte man verwenden, wenn man es braucht, persönlich habe ich es noch nie benötigt. für gewöhnliche zwecke ist die implizite konvertierung nach void* genau das richtige, zumal dynamic_cast&lt;void*&gt; einen zeiger auf einen polymorphen typ benötigt. betrachten wir z.b.</p>
<pre><code class="language-cpp">struct Base1 { virtual ~Base1() {} };
struct Base2 { virtual ~Base2() {} };
struct Derived : Base1,Base2 {};
void foo()
{
    Base2* p = new Derived();
    void* q = dynamic_cast&lt;void*&gt;(p);
    Base2* r = static_cast&lt;Base2*&gt;(q); // ups
}
</code></pre>
<p>hast du mal ein paar links zu orten, die dynamic_cast vorschlagen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118462</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 16 Aug 2006 14:41:23 GMT</pubDate></item><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Wed, 16 Aug 2006 14:42:24 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Ich habe jetzt schon an verschiedenen Orten (unter anderem in der MSDN) gelesen, dass man, wenn man einen Pointer zu void* konvertieren will, dynamic_cast verwenden soll.</p>
</blockquote>
<p>Ich nicht.<br />
(Hint: Ein Link zum Nachlesen wäre hilfreich)</p>
<blockquote>
<p>Und noch ein zweite ähnliche Frage einfach in die verkehrte Richtung. Gibt es eigentlich eine Möglichkeit eine Art von dynamic_cast auf einen void-Zeiger anzuwenden.</p>
</blockquote>
<p>Nein.</p>
<p>Zu langsam <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/1118463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118463</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 16 Aug 2006 14:42:24 GMT</pubDate></item><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Wed, 16 Aug 2006 14:42:44 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>dynamic_cast mit void* zu benutzten ist Unsinn, denn void* ist ein typloser Pointer. Und dynamic_cast ist ja gerade dazuda, den Typ des Ursprungs zu überprüfen.</p>
<p>bei void* must du immer reinterpret_cast nehmen. Und natürlich hast du dann auch keine Tpy-Überprüfung. Deshalb must du dir in C++ immer gut überlegen, ob du void* verwenden willst.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118465</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 16 Aug 2006 14:42:44 GMT</pubDate></item><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Wed, 16 Aug 2006 14:55:41 GMT]]></title><description><![CDATA[<p>der einzige sinnvolle einsatzzweck scheint mir zu sein, zu testen, ob zwei pointer in das gleiche 'most-derived'-objekt zeigen:</p>
<pre><code class="language-cpp">template&lt;typename T,typename U&gt;
bool same_object(T* t, U* u) { return dynamic_cast&lt;const void*&gt;(t) == dynamic_cast&lt;const void*&gt;(u); }
</code></pre>
<p>das ist letztlich nicht besonders nützlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118478</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 16 Aug 2006 14:55:41 GMT</pubDate></item><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Wed, 16 Aug 2006 15:07:38 GMT]]></title><description><![CDATA[<p>Ok link ... hmmm *sucht* ...<br />
<a href="http://msdn2.microsoft.com/en-us/library/cby9kycs.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/cby9kycs.aspx</a></p>
<p>Da steht dann auch:</p>
<p>MSDN schrieb:</p>
<blockquote>
<p>If type-id is void*, a run-time check is made to determine the actual type of expression. The result is a pointer to the complete object pointed to by expression.</p>
</blockquote>
<p>Allerdings versteht ich das nicht so recht. void* ist ja eben Typenlos. Wieso wird dann ein run-time check auf &quot;the expression&quot; gemacht, wofür? Und das Resultat sei dann ein vollständiger Pointer auf das Objekt. Ist es ohne dynamic_cast denn kein vollständiger Pointer oder wie? ^^</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118487</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 16 Aug 2006 15:07:38 GMT</pubDate></item><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Wed, 16 Aug 2006 15:19:08 GMT]]></title><description><![CDATA[<p>Da steht aber nirgendwo, dass man dynamic_cast für cast-to-void* nehmen <strong>sollte</strong>. Dort ist lediglich beschrieben was camper mit seinem Beispiel schon gezeigt hat, nämlich dass ein dynamic_cast&lt;void*&gt; einen Zeiger auf ein vollständiges Objekt des (Laufzeit-)Typs von <em>expression</em> liefert. Anders ausgedrückt eben das &quot;most-derived&quot; Objekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118494</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 16 Aug 2006 15:19:08 GMT</pubDate></item><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Wed, 16 Aug 2006 15:49:49 GMT]]></title><description><![CDATA[<p>*MSDN-Artikel nochmals durchliest* ... mist da stand wirklich nichts von dem. Aber es stand in verschiedenen Tutorials und mindestens zwei Artikel. Aber meint ihr ich würde diese Seiten noch finden? ^^<br />
Und vergesst es, die History beim Browser hilft auch nicht:<br />
1. Ich hab sie abgeschaltet<br />
2. Wenn sie angeschaltet wäre, wären da viel zu viele Links <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Aber egal, ich glaube jetzt einfach, dass es nicht sehr nützlich ist. Erstens sehe ich selber dahinter nicht sehr viel Sinn. Zweitens wurde von verschiedenen Personen was dazu gesagt, von welchen ich (womöglich falschen) glauben habe, dass sie eine Ahnung von C++ haben.</p>
<p>Allerdings, da wir gerade beim Thema sind. Was ist dieses most-derived Zeugs? Wo ist der Unterschied im Nutzen, zwischen diesen folgenden zweien?</p>
<pre><code class="language-cpp">// Den code von Camper
template&lt;typename T,typename U&gt;
bool same_object_camper(T* t, U* u) { return dynamic_cast&lt;const void*&gt;(t) == dynamic_cast&lt;const void*&gt;(u); }

// Meinem Code
bool same_object_dravere(const void* t, const void* u) const { return t == u; };
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118512</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 16 Aug 2006 15:49:49 GMT</pubDate></item><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Wed, 16 Aug 2006 15:56:54 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Allerdings, da wir gerade beim Thema sind. Was ist dieses most-derived Zeugs? Wo ist der Unterschied im Nutzen, zwischen diesen folgenden zweien?</p>
</blockquote>
<pre><code class="language-cpp">// Den code von Camper
template&lt;typename T,typename U&gt;
bool same_object_camper(T* t, U* u) { return dynamic_cast&lt;const void*&gt;(t) == dynamic_cast&lt;const void*&gt;(u); }

// Meinem Code
bool same_object_dravere(const void* t, const void* u) const { return t == u; };

struct Base1 { virtual ~Base1() {} };
struct Base2 { virtual ~Base2() {} };
struct Derived : Base1,Base2 {};

void foo()
{
    Derived d;
    Base1* b1 = &amp;d;
    Base2* b2 = &amp;d;
    same_object_camper(b1,b2); // true
    same_object_dravere(b1,b2); // false
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1118519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118519</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 16 Aug 2006 15:56:54 GMT</pubDate></item><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Wed, 16 Aug 2006 16:29:47 GMT]]></title><description><![CDATA[<p>toll, die eine Funktion ergibt true und die andere false. Das hab ich mir schon gedacht, so blöd bin ich auch nicht ^^<br />
Aber wo ist der Unterschied in der Mechanik, der Funktion. <strong>Wieso</strong> ergibt es beim einen true und beim anderen false. Werden denn nicht die Adresse verglichen, wenn man zwei void-Zeiger vergleicht? Was dann, wenn es typenlose Zeiger sind?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118554</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 16 Aug 2006 16:29:47 GMT</pubDate></item><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Wed, 16 Aug 2006 16:45:08 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>toll, die eine Funktion ergibt true und die andere false. Das hab ich mir schon gedacht, so blöd bin ich auch nicht ^^<br />
Aber wo ist der Unterschied in der Mechanik, der Funktion. <strong>Wieso</strong> ergibt es beim einen true und beim anderen false. Werden denn nicht die Adresse verglichen, wenn man zwei void-Zeiger vergleicht? Was dann, wenn es typenlose Zeiger sind?</p>
</blockquote>
<p>b1 und b2 zeigen halt auf den Base1- bzw. den Base2-Anteil von d, das ist nicht die gleiche Adresse, sondern eben eine unterschiedliche. Die dynamic_cast-Variante jedoch ergibt void-Pointer mit der Adresse von d (also auf den am weitesten abgeleiteten Typ des Objektes), was die gleiche Adresse ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118568</guid><dc:creator><![CDATA[rtti]]></dc:creator><pubDate>Wed, 16 Aug 2006 16:45:08 GMT</pubDate></item><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Wed, 16 Aug 2006 17:53:14 GMT]]></title><description><![CDATA[<p>Achso <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> *nicht dumm ist, aber anscheinend auch nicht all zu klug, hätte man ja auch selber rausfinden können* ^^ ... dankeschön.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1118626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1118626</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 16 Aug 2006 17:53:14 GMT</pubDate></item><item><title><![CDATA[Reply to void* p = dynamic_cast&amp;lt;void*&amp;gt;(Pointer); on Thu, 17 Aug 2006 15:12:37 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>bei void* must du immer reinterpret_cast nehmen.</p>
</blockquote>
<p>Naja, für void* nimmt man idR static_cast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1119296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1119296</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Thu, 17 Aug 2006 15:12:37 GMT</pubDate></item></channel></rss>