<?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[Dinkum STL und auto_ptr]]></title><description><![CDATA[<p>Hallo,<br />
der neue C++ Builder wird ja mit der Dinkum STL ausgeliefert.<br />
Ich habe mir mal gedacht, wenn du viel STL benutzt bist du komatible.<br />
Scheint ein Denkfehler gewesen zu sein.<br />
Hier ein Beispiel was mit dem Builder 6.0 funktionert, der Builder 2006 aber nicht übersetzt.</p>
<pre><code class="language-cpp">std::auto_ptr&lt;int&gt; create()
{ std::auto_ptr&lt;int&gt; a(new int());
  return a;
}
//---------------------------------------------------------------------------
void load()
{ std::auto_ptr&lt;int&gt; b = create(); //das geht
  std::auto_ptr&lt;int&gt; c = create();
  b = c; //das geht
  b = create();
  //[C++ Fehler] Keine Übereinstimmung für 'std::auto_ptr&lt;int&gt;::operator = &lt;_Other&gt;(std::auto_ptr&lt;int&gt;)' gefunden
}
</code></pre>
<p>Kann mir jemand erklären was das soll, oder bin ich zu blöd zum programmieren?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/140669/dinkum-stl-und-auto_ptr</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 10:00:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/140669.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Mar 2006 13:41:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dinkum STL und auto_ptr on Thu, 16 Mar 2006 13:41:46 GMT]]></title><description><![CDATA[<p>Hallo,<br />
der neue C++ Builder wird ja mit der Dinkum STL ausgeliefert.<br />
Ich habe mir mal gedacht, wenn du viel STL benutzt bist du komatible.<br />
Scheint ein Denkfehler gewesen zu sein.<br />
Hier ein Beispiel was mit dem Builder 6.0 funktionert, der Builder 2006 aber nicht übersetzt.</p>
<pre><code class="language-cpp">std::auto_ptr&lt;int&gt; create()
{ std::auto_ptr&lt;int&gt; a(new int());
  return a;
}
//---------------------------------------------------------------------------
void load()
{ std::auto_ptr&lt;int&gt; b = create(); //das geht
  std::auto_ptr&lt;int&gt; c = create();
  b = c; //das geht
  b = create();
  //[C++ Fehler] Keine Übereinstimmung für 'std::auto_ptr&lt;int&gt;::operator = &lt;_Other&gt;(std::auto_ptr&lt;int&gt;)' gefunden
}
</code></pre>
<p>Kann mir jemand erklären was das soll, oder bin ich zu blöd zum programmieren?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1017536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1017536</guid><dc:creator><![CDATA[gh]]></dc:creator><pubDate>Thu, 16 Mar 2006 13:41:46 GMT</pubDate></item><item><title><![CDATA[Reply to Dinkum STL und auto_ptr on Thu, 16 Mar 2006 22:40:58 GMT]]></title><description><![CDATA[<p>Hallo gh,</p>
<p>Der Online-Comeau-Compiler und der VC8 übersetzen es auch; und ersterer behauptet nahezu Standard-kompatibel zu sein.<br />
Vielleicht liegt es an der nicht const Referenz, den der auto_ptr im assignment-Operator erwartet.</p>
<pre><code class="language-cpp">template&lt;class X&gt; class auto_ptr {
public:
// 20.4.5.1 construct/copy/destroy:
auto_ptr&amp; operator=( auto_ptr&amp; ); // &lt;-- das Source-Objekt wird bei Copy verändert
</code></pre>
<p>Versuch' mal statt</p>
<pre><code class="language-cpp">std::auto_ptr&lt;int&gt; create()
{ std::auto_ptr&lt;int&gt; a(new int());
  return a;
}
</code></pre>
<p>besser</p>
<pre><code class="language-cpp">std::auto_ptr_ref&lt; int &gt; create()
{ 
    return std::auto_ptr&lt; int &gt;( new int() );
}
</code></pre>
<p>Der Standard sagt:<br />
<em><strong>20.4.5 Class template auto_ptr</strong><br />
Template auto_ptr_ref holds a reference to an auto_ptr. It is used by the auto_ptr conversions<br />
to allow auto_ptr objects to be passed to and returned from functions.</em></p>
<p>.. aber der Comeau übersetzt es dann nicht mehr; VC8 schon .. das ist eine Stelle an C++, die ich noch nicht so recht verstanden habe, aber einige Compiler-Bauer wohl auch nicht.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1017956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1017956</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 16 Mar 2006 22:40:58 GMT</pubDate></item><item><title><![CDATA[Reply to Dinkum STL und auto_ptr on Thu, 16 Mar 2006 23:42:32 GMT]]></title><description><![CDATA[<p>das dürfte ein fehler in der dinkumware stl sein. er existiert u.a. auch in vc++7.1 - allerdings erlaubt dieser compiler, dass temporaries an non-const referenzen gebunden werden können, er beeinflusst damit korrekten code nicht.</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Hallo gh,</p>
<p>Der Online-Comeau-Compiler und der VC8 übersetzen es auch; und ersterer behauptet nahezu Standard-kompatibel zu sein.<br />
Vielleicht liegt es an der nicht const Referenz, den der auto_ptr im assignment-Operator erwartet.</p>
<pre><code class="language-cpp">template&lt;class X&gt; class auto_ptr {
public:
// 20.4.5.1 construct/copy/destroy:
auto_ptr&amp; operator=( auto_ptr&amp; ); // &lt;-- das Source-Objekt wird bei Copy verändert
</code></pre>
<p>Versuch' mal statt</p>
<pre><code class="language-cpp">std::auto_ptr&lt;int&gt; create()
{ std::auto_ptr&lt;int&gt; a(new int());
  return a;
}
</code></pre>
<p>besser</p>
<pre><code class="language-cpp">std::auto_ptr_ref&lt; int &gt; create()
{ 
    return std::auto_ptr&lt; int &gt;( new int() );
}
</code></pre>
<p>Der Standard sagt:<br />
<em><strong>20.4.5 Class template auto_ptr</strong><br />
Template auto_ptr_ref holds a reference to an auto_ptr. It is used by the auto_ptr conversions<br />
to allow auto_ptr objects to be passed to and returned from functions.</em></p>
<p>.. aber der Comeau übersetzt es dann nicht mehr; VC8 schon .. das ist eine Stelle an C++, die ich noch nicht so recht verstanden habe, aber einige Compiler-Bauer wohl auch nicht.</p>
<p>Gruß<br />
Werner</p>
</blockquote>
<p>auto_ptr's op= ist überladen:</p>
<pre><code class="language-cpp">auto_ptr&amp; operator=(auto_ptr_ref&lt;X&gt; r) throw();
</code></pre>
<p>ausserdem besitzt auto_ptr eine conversions-operator für auto_ptr_ref. da dieser operator eine memberfunktion ist, kann er mit rvalues verwendet werden (da der operator non-const ist, wird er nicht mit const auto_ptr funktionieren, wie es sein soll) - es ist diese hintertür, die auto_ptr überhaupt erst praktikabel macht. der ursprünglich gezeigte code ist korrekt. der vorschlag mit auto_ptr_ref als rückgabetyp ist eine sackgasse - letzlich ist auto_ptr_ref ein implementations detail von auto_ptr, das sich nur deshalb im namensraum std (in C++03) befindet, weil sonst die die konvertierung von auto_ptr&lt;X&gt; nach auto_ptr&lt;Y&gt; mit rvalues nicht funktionieren könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1017966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1017966</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 16 Mar 2006 23:42:32 GMT</pubDate></item><item><title><![CDATA[Reply to Dinkum STL und auto_ptr on Fri, 17 Mar 2006 16:40:52 GMT]]></title><description><![CDATA[<p>Vielen Dank,<br />
ich habe auch lange überlegt, was an dem Code falsch sein könnte und kam nur zu dem Schluss, dass hier die STL spinnt. Aber man weiß ja nie. Man hat oft genug einfach nur ein Brett vorm Kopf.<br />
Mein Selbstvertrauen ist wieder hergestellt.</p>
<p>Ein Rückgabe als Referenz ist nicht möglich, da dann die Verantwortung des Zeigers in der Funktion bleibt. Das ist nicht gewollt.</p>
<p>Gruß gh</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1018479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1018479</guid><dc:creator><![CDATA[gh]]></dc:creator><pubDate>Fri, 17 Mar 2006 16:40:52 GMT</pubDate></item></channel></rss>