<?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[Frage zur Gültigkeit von auto_prt]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich versuche mich gerade an auto_prt:<br />
<a href="http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=auto_ptr#Answ" rel="nofollow">http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=auto_ptr#Answ</a></p>
<pre><code class="language-cpp">void Destroy(auto_ptr&lt;X&gt; Stirb)
{}
int main()
{
    for (int i = 0; i &lt; 10 ; i++)
    {
        auto_ptr&lt;X&gt; Pointer(new X);
        Destroy(Pointer);
        cout &lt;&lt; Pointer.get() &lt;&lt; endl;
    }
}
</code></pre>
<p>1. Warum wird hier der auto_ptr nach destroy zerstört? Wird der Sub Destroy keine Kopie übergeben? Ist ja keine Referenz.</p>
<p>2. Ich muß mich gerade viel mit einer Api herumschlagen die ständig erwartet das ich einen void *Buffer der Bytelänge X übergebe der dann von der Api Funktion beschrieben wird. Nun sehe ich aber das man keine Byte Arrays in auto_ptr lagern darf. Was schlägt Ihr vor? Gibt es da Tricks? Oder muß ich die ganzen delete Statements an jedem Funktionsausgang belassen.</p>
<p>Vielen Dank</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189537/frage-zur-gültigkeit-von-auto_prt</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 09:32:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189537.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Aug 2007 09:49:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zur Gültigkeit von auto_prt on Tue, 14 Aug 2007 09:49:37 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich versuche mich gerade an auto_prt:<br />
<a href="http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=auto_ptr#Answ" rel="nofollow">http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=auto_ptr#Answ</a></p>
<pre><code class="language-cpp">void Destroy(auto_ptr&lt;X&gt; Stirb)
{}
int main()
{
    for (int i = 0; i &lt; 10 ; i++)
    {
        auto_ptr&lt;X&gt; Pointer(new X);
        Destroy(Pointer);
        cout &lt;&lt; Pointer.get() &lt;&lt; endl;
    }
}
</code></pre>
<p>1. Warum wird hier der auto_ptr nach destroy zerstört? Wird der Sub Destroy keine Kopie übergeben? Ist ja keine Referenz.</p>
<p>2. Ich muß mich gerade viel mit einer Api herumschlagen die ständig erwartet das ich einen void *Buffer der Bytelänge X übergebe der dann von der Api Funktion beschrieben wird. Nun sehe ich aber das man keine Byte Arrays in auto_ptr lagern darf. Was schlägt Ihr vor? Gibt es da Tricks? Oder muß ich die ganzen delete Statements an jedem Funktionsausgang belassen.</p>
<p>Vielen Dank</p>
<p>Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344159</guid><dc:creator><![CDATA[martin_salo]]></dc:creator><pubDate>Tue, 14 Aug 2007 09:49:37 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Gültigkeit von auto_prt on Tue, 14 Aug 2007 10:09:17 GMT]]></title><description><![CDATA[<p>Der Pointer ist nicht kopierbar. Wenn der an destroy() übergeben wird, existiert er nur noch in destroy(). In der main ist er gleich null. Und der seine Spur sich in destroy() verliert, wird er da am Ende auch zerstört. Alles so wie es auto_ptr vorsieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344166</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Tue, 14 Aug 2007 10:09:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Gültigkeit von auto_prt on Tue, 14 Aug 2007 10:14:57 GMT]]></title><description><![CDATA[<p>@1: Bei der Parameterübergabe wird der Pointer kopiert (ganz normal), <strong>aber</strong> die Kopiersemantik von auto_ptr&lt;&gt; klemmt die Quelle von ihrem Objekt ab - d.h. beim Eintritt in die Funktion destroy() wird 'Pointer' auf NULL gesetzt (und beim Verlassen der Funktion wird dessen &quot;Kopie&quot; 'Stirb' vernichtet und löscht die Daten hinter dem Zeiger.</p>
<p>@2: auto_ptr&lt;&gt; ist zwar mitunter praktisch, aber leider nur begrenzt einsetzbar (und leider der einzige Smart-Pointer im Standard). Als Alternative kannst du die Boost-Pointer wie shared_ptr oder shared_array verwenden (oder du nimmst std::vector&lt;&gt; und überlässt ihm die Speicherverwaltung).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344171</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 14 Aug 2007 10:14:57 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Gültigkeit von auto_prt on Tue, 14 Aug 2007 10:35:56 GMT]]></title><description><![CDATA[<p>Vielen Dank CStoll und Artchi <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Ich versuche mich mal an shared_array.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344184</guid><dc:creator><![CDATA[martin_salo]]></dc:creator><pubDate>Tue, 14 Aug 2007 10:35:56 GMT</pubDate></item></channel></rss>