<?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&amp;lt;const T&amp;gt; in shared_ptr&amp;lt;T&amp;gt; konvertieren]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ist es möglich, einen Zeigertyp <code>std::tr1::shared_ptr&lt;const T&gt;</code> in einen Zeigertyp ohne const ( <code>std::tr1::shared_ptr&lt;T&gt;</code> ) konvertieren?</p>
<p>Mein Versuch:</p>
<pre><code class="language-cpp">#include &lt;memory&gt;

int main()
{
    std::tr1::shared_ptr&lt;const int&gt; const_int_ptr(new int(34));
    std::tr1::shared_ptr&lt;int&gt;             int_ptr(const_cast&lt;int*&gt;(const_int_ptr.get()));
}
</code></pre>
<p>Laufzeitfehler (MSVC):</p>
<pre><code>Expression: _BLOCK_TYPE_IS_VALID(pHead-&gt;nBlockUse)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/264196/shared_ptr-lt-const-t-gt-in-shared_ptr-lt-t-gt-konvertieren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 05:55:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264196.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 Apr 2010 22:03:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to shared_ptr&amp;lt;const T&amp;gt; in shared_ptr&amp;lt;T&amp;gt; konvertieren on Sat, 03 Apr 2010 22:03:10 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ist es möglich, einen Zeigertyp <code>std::tr1::shared_ptr&lt;const T&gt;</code> in einen Zeigertyp ohne const ( <code>std::tr1::shared_ptr&lt;T&gt;</code> ) konvertieren?</p>
<p>Mein Versuch:</p>
<pre><code class="language-cpp">#include &lt;memory&gt;

int main()
{
    std::tr1::shared_ptr&lt;const int&gt; const_int_ptr(new int(34));
    std::tr1::shared_ptr&lt;int&gt;             int_ptr(const_cast&lt;int*&gt;(const_int_ptr.get()));
}
</code></pre>
<p>Laufzeitfehler (MSVC):</p>
<pre><code>Expression: _BLOCK_TYPE_IS_VALID(pHead-&gt;nBlockUse)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1877330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877330</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 03 Apr 2010 22:03:10 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr&amp;lt;const T&amp;gt; in shared_ptr&amp;lt;T&amp;gt; konvertieren on Sat, 03 Apr 2010 22:21:25 GMT]]></title><description><![CDATA[<p>OK habs gerade gefunden:</p>
<pre><code class="language-cpp">#include &lt;memory&gt;

int main()
{
    std::tr1::shared_ptr&lt;const int&gt; const_int_ptr(new int(34));
    std::tr1::shared_ptr&lt;int&gt;             int_ptr(std::tr1::const_pointer_cast&lt;int&gt;(const_int_ptr));
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1877335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877335</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 03 Apr 2010 22:21:25 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr&amp;lt;const T&amp;gt; in shared_ptr&amp;lt;T&amp;gt; konvertieren on Sat, 03 Apr 2010 22:27:57 GMT]]></title><description><![CDATA[<p>Du solltest dich aber fragen, warum dieser Cast nötig ist. <code>const_cast</code> und die Umgehung der Const-Correctness ist in den meisten Fällen ein Designfehler.</p>
<p>Warum lässt du den ursprünglichen Zeiger überhaupt auf konstante Objekte zeigen, wenn du nachher trotzdem wieder schreibend auf diese zugreifen willst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877337</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 03 Apr 2010 22:27:57 GMT</pubDate></item><item><title><![CDATA[Reply to shared_ptr&amp;lt;const T&amp;gt; in shared_ptr&amp;lt;T&amp;gt; konvertieren on Sun, 04 Apr 2010 09:39:53 GMT]]></title><description><![CDATA[<p>daersc schrieb:</p>
<blockquote>
<p>Mein Versuch:</p>
<pre><code class="language-cpp">#include &lt;memory&gt;

int main()
{
    std::tr1::shared_ptr&lt;const int&gt; const_int_ptr(new int(34));
    std::tr1::shared_ptr&lt;int&gt;             int_ptr(const_cast&lt;int*&gt;(const_int_ptr.get()));
}
</code></pre>
<p>Laufzeitfehler (MSVC):</p>
<pre><code>Expression: _BLOCK_TYPE_IS_VALID(pHead-&gt;nBlockUse)
</code></pre>
</blockquote>
<p>Nur, falls noch nicht klar ist, warum das nicht funktioniert: Der zweite shared_ptr erzeugt einen neuen referenzcounter. Die beiden shapred_ptr Instanzen wissen nichts voneinander und beide &quot;denken&quot; sie seien der einzige &quot;Besitzer&quot;. Demtentsprechend gibt es &quot;double deletion&quot;.</p>
<p>Beachte: der shared_ptr-Konstruktor, der einen rohen Zeiger entgegen nimmt, erwartet, dass der Zeiger (falls ungleich null) auf ein neues Objekt zeigt, welches <em>noch nicht unter Kontrolle steht</em>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1877384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1877384</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 04 Apr 2010 09:39:53 GMT</pubDate></item></channel></rss>