<?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[Benutzt hier wer auto_ptr]]></title><description><![CDATA[<p>Ich bin die ganze Zeit ohne ausgekommen. Jetzt dachte ich mir &quot;kannst die ja mal benutzen&quot;, aber ich finde das handling irgendwie kacke. Beispiel:</p>
<pre><code>Interface* pInterface = 0;

#ifdef __linux__
	pInterface = new InterfaceLinux();
#else
	pInterface = new InterfaceWindows();
#endif

// Programmlogik

delete pInterface ;
</code></pre>
<p>Daraus wird dann irgendwie sowas:</p>
<pre><code>std::auto_ptr&lt;Interface*&gt; pInterface(0);

#ifdef __linux__
	pInterface = new InterfaceLinux();  // Zuweisung geht so nicht mehr?!
#else
	pInterface = new InterfaceWindows();  // Zuweisung geht so nicht mehr?!
#endif

// Programmlogik 
/* Hier muss jetzt dereferenziert werden (*pInterface) oder alle Funktionen müssen auf std::auto_ptr&lt;Interface*&gt; umgestellt werden */

doSthWithInterface(*pInterface);
</code></pre>
<p>Man spart sich das delete und alles andere wird irgendwie komplizierter. Ich sehe die Vorteile nicht so recht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321988/benutzt-hier-wer-auto_ptr</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 13:52:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321988.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Dec 2013 22:19:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Benutzt hier wer auto_ptr on Sun, 01 Dec 2013 22:19:27 GMT]]></title><description><![CDATA[<p>Ich bin die ganze Zeit ohne ausgekommen. Jetzt dachte ich mir &quot;kannst die ja mal benutzen&quot;, aber ich finde das handling irgendwie kacke. Beispiel:</p>
<pre><code>Interface* pInterface = 0;

#ifdef __linux__
	pInterface = new InterfaceLinux();
#else
	pInterface = new InterfaceWindows();
#endif

// Programmlogik

delete pInterface ;
</code></pre>
<p>Daraus wird dann irgendwie sowas:</p>
<pre><code>std::auto_ptr&lt;Interface*&gt; pInterface(0);

#ifdef __linux__
	pInterface = new InterfaceLinux();  // Zuweisung geht so nicht mehr?!
#else
	pInterface = new InterfaceWindows();  // Zuweisung geht so nicht mehr?!
#endif

// Programmlogik 
/* Hier muss jetzt dereferenziert werden (*pInterface) oder alle Funktionen müssen auf std::auto_ptr&lt;Interface*&gt; umgestellt werden */

doSthWithInterface(*pInterface);
</code></pre>
<p>Man spart sich das delete und alles andere wird irgendwie komplizierter. Ich sehe die Vorteile nicht so recht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369295</guid><dc:creator><![CDATA[AutoBrumbrumm]]></dc:creator><pubDate>Sun, 01 Dec 2013 22:19:27 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzt hier wer auto_ptr on Sun, 01 Dec 2013 22:20:33 GMT]]></title><description><![CDATA[<p>Ach die Zuweisung wird nicht mehr gehen, weil ich auch da dereferenzieren muss. Wie umständlich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369296</guid><dc:creator><![CDATA[AutoBrumbrumm]]></dc:creator><pubDate>Sun, 01 Dec 2013 22:20:33 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzt hier wer auto_ptr on Sun, 01 Dec 2013 22:27:25 GMT]]></title><description><![CDATA[<p>Du solltest statt <code>auto_ptr</code> <a href="http://en.cppreference.com/w/cpp/memory/unique_ptr" rel="nofollow"> <code>unique_ptr</code> </a>verwenden. Und das Template-Argument ist der Typ des Pointees.</p>
<pre><code>std::unique_ptr&lt;Interface&gt; pInterface;
</code></pre>
<p>Zur Neuzuweisung kannst du<a href="http://en.cppreference.com/w/cpp/memory/unique_ptr/reset" rel="nofollow"> <code>reset</code> </a>verwenden.</p>
<pre><code>#ifdef __linux__
    pInterface.reset( new InterfaceLinux );
#else
    pInterface.reset( new InterfaceWindows );
#endif
</code></pre>
<p>Wobei ich mich frage, wieso die Zuweisung ins Makro stecken, und nicht den Initializer der Definition...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369298</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 01 Dec 2013 22:27:25 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzt hier wer auto_ptr on Sun, 01 Dec 2013 22:33:05 GMT]]></title><description><![CDATA[<p>Der unique pointer erscheint sinnvoll.<br />
Die Initialisierung hab ich aus den defines rausgenommen, da sich durch Codedopplung beim Kompilieren auf den unterschiedlichen Plattformen oftmals Rechtschreibfehler bemerkbar gemacht haben (unter Windows die Variable umbenannt, unter Linux nicht)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369299</guid><dc:creator><![CDATA[AutoBrumbrumm]]></dc:creator><pubDate>Sun, 01 Dec 2013 22:33:05 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzt hier wer auto_ptr on Sun, 01 Dec 2013 22:33:50 GMT]]></title><description><![CDATA[<p>also irgendwie rede ich nur noch Unsinn.<br />
Zeit zum schlafen gehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369300</guid><dc:creator><![CDATA[AutoBrumbrumm]]></dc:creator><pubDate>Sun, 01 Dec 2013 22:33:50 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzt hier wer auto_ptr on Sun, 01 Dec 2013 23:09:20 GMT]]></title><description><![CDATA[<p>Du kannst den <code>#ifdef</code> Code auch noch weiter zurückdrängen wenn du willst:</p>
<pre><code class="language-cpp">Interface* CreateInterface()
{
    return new
#ifdef __linux__
    InterfaceLinux();
#else
    InterfaceWindows();
#endif
}
...
    std::unique_ptr&lt;Interface&gt; pInterface(CreateInterface());
</code></pre>
<p>Oder auch</p>
<pre><code class="language-cpp">#ifdef __linux__
#define INTERFACE InterfaceLinux
#else
#define INTERFACE InterfaceWindows
#endif
...
</code></pre>
<p>Viele Wege führen nach Rom.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369309</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 01 Dec 2013 23:09:20 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzt hier wer auto_ptr on Sun, 01 Dec 2013 23:18:03 GMT]]></title><description><![CDATA[<pre><code>#ifdef __linux__
typedef Interface InterfaceLinux
#else
typedef Interface InterfaceWindows
#endif
</code></pre>
<p>Und plötzlich braucht es weder Zeiger noch new.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369310</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 01 Dec 2013 23:18:03 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzt hier wer auto_ptr on Mon, 02 Dec 2013 03:48:07 GMT]]></title><description><![CDATA[<p>Oops.<br />
Ja, <code>typedef</code> ist eleganter als <code>#define</code> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Wobei, <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>, ich glaub du hast da was verdreht - ich denke der Name der definiert (Interface) wird steht bei typedef rechts <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/2369313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369313</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 02 Dec 2013 03:48:07 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzt hier wer auto_ptr on Mon, 02 Dec 2013 10:28:46 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Oops.<br />
Ja, <code>typedef</code> ist eleganter als <code>#define</code> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Wobei, <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>, ich glaub du hast da was verdreht - ich denke der Name der definiert (Interface) wird steht bei typedef rechts <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>
</blockquote>
<p><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="🙂"
    /> Das kommt davon, wenn man mit einem Auge auf das define-Makro schielt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369331</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 02 Dec 2013 10:28:46 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzt hier wer auto_ptr on Mon, 02 Dec 2013 10:42:01 GMT]]></title><description><![CDATA[<p>Warum gibt es eine Unterscheidung im Interface zwischen Linux und Windows? Ich dachte, es ist ein Interface, d.h. die Implementation fuer Linux/Windows kann durch das Buildscript realisiert werden, weder <code>define</code> noch <code>typedef</code> ist im Code noetig. Zumindestens gehe ich meist diesen Weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369332</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 02 Dec 2013 10:42:01 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzt hier wer auto_ptr on Mon, 02 Dec 2013 11:35:41 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21632">@knivil</a><br />
Er hat eh eine Basisklasse <code>Interface</code> , für die es dann zwei konkrete Implementierungen gibt ( <code>InterfaceLinux</code> und <code>InterfaceWindows</code> ).</p>
<p>Natürlich könnte man diese drei Klassen zusammenfassen, und gleich den Inhalt/Aufbau von <code>Interface</code> per Präprozessor/Build-Skript abhängig vom OS machen.</p>
<p>Bei der <code>typedef</code> Variante sehe ich jetzt aber keinen echten Nachteil.</p>
<p>Abgesehen vielleicht von Sachen wie z.B. wie gut sich das mit diversen Doku-Generatoren (Doxygen, ...) verträgt. Was das angeht wäre es aber vermutlich besser, wenn man eine Klasse <code>Interface</code> hätte, die grösstenteils unabhängig vom OS implementiert ist, und weder per <code>typedef</code> noch per Makro noch per Build-Skript ausgetauscht wird. D.h. entweder zurück zu der Variante die der OP eh schon hat (gemeinsame Basisklasse). Oder eine kleine Wrapper-Klasse die intern abhängig vom OS ein <code>InterfaceLinux</code> oder <code>InterfaceWindows</code> hat, und alle Calls einfach weiterleitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369343</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 02 Dec 2013 11:35:41 GMT</pubDate></item><item><title><![CDATA[Reply to Benutzt hier wer auto_ptr on Mon, 02 Dec 2013 12:37:23 GMT]]></title><description><![CDATA[<p>Nun, ich will nur das aktuelle Design kommentieren. Es hat nichts mit auto_ptr zu tun. Echte Nachteile gibt es insgesamt nicht, aber es ist vom Design her unsauber. Laufzeitpolymorphie ueber zwei Ableitungen zu nutzen, wenn niemals beide im Programmfluss instanziert und in einem Kontainer gemeinsam verwaltet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2369346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2369346</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 02 Dec 2013 12:37:23 GMT</pubDate></item></channel></rss>