<?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[ifstream objekt als rückgabewert?]]></title><description><![CDATA[<p>hi,<br />
ich habe gelesen, das ein streamobjekt nicht kopierbar ist.</p>
<pre><code class="language-cpp">ifstream open_file ( char* file )
{
	ifstream infile (file);
	return infile;
}
</code></pre>
<p>prinzipiell ist obiges also gar nicht möglich? oder doch irgendwie?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245851/ifstream-objekt-als-rückgabewert</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 12:58:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245851.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Jul 2009 21:43:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ifstream objekt als rückgabewert? on Sun, 19 Jul 2009 21:43:15 GMT]]></title><description><![CDATA[<p>hi,<br />
ich habe gelesen, das ein streamobjekt nicht kopierbar ist.</p>
<pre><code class="language-cpp">ifstream open_file ( char* file )
{
	ifstream infile (file);
	return infile;
}
</code></pre>
<p>prinzipiell ist obiges also gar nicht möglich? oder doch irgendwie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1745993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1745993</guid><dc:creator><![CDATA[stream0r]]></dc:creator><pubDate>Sun, 19 Jul 2009 21:43:15 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream objekt als rückgabewert? on Sun, 19 Jul 2009 21:46:53 GMT]]></title><description><![CDATA[<p>stream0r schrieb:</p>
<blockquote>
<p>hi,<br />
ich habe gelesen, das ein streamobjekt nicht kopierbar ist.</p>
<pre><code class="language-cpp">ifstream open_file ( char* file )
{
	ifstream infile (file);
	return infile;
}
</code></pre>
<p>prinzipiell ist obiges also gar nicht möglich? oder doch irgendwie?</p>
</blockquote>
<p>Das ist nicht möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1745997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1745997</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 19 Jul 2009 21:46:53 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream objekt als rückgabewert? on Sun, 19 Jul 2009 22:30:31 GMT]]></title><description><![CDATA[<p>stream0r schrieb:</p>
<blockquote>
<p>prinzipiell ist obiges also gar nicht möglich? oder doch irgendwie?</p>
</blockquote>
<p>Nein, und das ist auch gut so.</p>
<p>Verwende stattdessen Referenzen oder Zeiger (evtl. sogar Smart Pointer). Stelle auf jeden Fall sicher, dass die Objekte nach der Rückgabe noch existieren. Oder konstruiere den Stream ausserhalb der Funktion und übergib eine Referenz darauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746020</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 19 Jul 2009 22:30:31 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream objekt als rückgabewert? on Sun, 19 Jul 2009 22:46:46 GMT]]></title><description><![CDATA[<p>Müsste das nicht mit RValue-Referenzen gehen? Das Objekt würde dann ja verschoben und nicht kopiert werden, man kann dann* ja afaik auch 'ifstream's in einem vector halten <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="🙂"
    /></p>
<p>*dann = Wenn die Bibliotheken umgestellt sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746024</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 19 Jul 2009 22:46:46 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream objekt als rückgabewert? on Sun, 19 Jul 2009 23:00:17 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Müsste das nicht mit RValue-Referenzen gehen?</p>
</blockquote>
<p>RValue-Referenzen darf man doch nicht an LValues binden, oder? Sofern man den <code>std::ifstream</code> nicht temporär erstellt, könnte das ein Problem werden. Ich muss dazu allerdings sagen, dass ich mich mit den neuen Sprachmitteln nicht besonders gut auskenne, das wäre einfach meine Vermutung.</p>
<p>Move-Semantik kannst du aber auch mit <code>std::auto_ptr</code> erreichen (in letzter Zeit gefällt mir dieser Smart Pointer richtig :)).</p>
<p>Badestrand schrieb:</p>
<blockquote>
<p>man kann dann* ja afaik auch 'ifstream's in einem vector halten <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="🙂"
    /></p>
</blockquote>
<p>Kann man das? Referenzen in Containern speichern? Und falls ja, hätte man nicht das gleiche Problem wie mit <code>std::auto_ptr</code> in Containern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746028</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 19 Jul 2009 23:00:17 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream objekt als rückgabewert? on Sun, 19 Jul 2009 23:10:37 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>RValue-Referenzen darf man doch nicht an LValues binden, oder?</p>
</blockquote>
<p>Doch, man kann explizit angeben, wenn man sie nicht mehr braucht, müsste dann so aussehen:</p>
<pre><code class="language-cpp">ifstream open_file ( char* file )
{
    ifstream infile (file);
    return std::move(infile);
}
</code></pre>
<p>Obwohl ich mir gerade unsicher bin, ob das nicht schon automatisch passiert. Einfach weil das Objekt im Moment des Zurückgebens den LValue-Status verliert. Oder so.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Move-Semantik kannst du aber auch mit <code>std::auto_ptr</code> erreichen (in letzter Zeit gefällt mir dieser Smart Pointer richtig :)).</p>
</blockquote>
<p>Hehe, schlechter Zeitpunkt. Irgendwer hatte hier vor ein paar Tagen diesen echt <a href="https://www.boostpro.com/trac/wiki/BoostCon09/RValue101" rel="nofollow">guten Artikel</a> zu den RValue-Referenzen gepostet. Darin steht unter Anderem, dass auto_ptr in C++0x deprecrated wird, aber ersetzt wird durch <code>unique_ptr</code> (aber mit, soweit ich verstanden habe, selber Funktionalität).</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Badestrand schrieb:</p>
<blockquote>
<p>man kann dann* ja afaik auch 'ifstream's in einem vector halten <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="🙂"
    /></p>
</blockquote>
<p>Kann man das? Referenzen in Containern speichern? Und falls ja, hätte man nicht das gleiche Problem wie mit <code>std::auto_ptr</code> in Containern?</p>
</blockquote>
<p>Huch, gute Frage, ob man dann Referenzen in einen Container packen kann. Also ich meine jedenfalls, man kann nicht-kopierbare Objekte in den vector packen (nicht Referenzen auf diese, die Objekte selbst). Das klappt halt, weil ja immer nur eine Instanz existiert und die Algorithmen in der Implementierung nur verschieben und nie kopieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746035</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 19 Jul 2009 23:10:37 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream objekt als rückgabewert? on Sun, 19 Jul 2009 23:30:40 GMT]]></title><description><![CDATA[<p>Du scheinst ja recht fasziniert von den neuen Möglichkeiten zu sein... <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="🙂"
    /></p>
<p>Badestrand schrieb:</p>
<blockquote>
<p>Hehe, schlechter Zeitpunkt. Irgendwer hatte hier vor ein paar Tagen diesen echt <a href="https://www.boostpro.com/trac/wiki/BoostCon09/RValue101" rel="nofollow">guten Artikel</a> zu den RValue-Referenzen gepostet. Darin steht unter Anderem, dass auto_ptr in C++0x deprecrated wird, aber ersetzt wird durch <code>unique_ptr</code> (aber mit, soweit ich verstanden habe, selber Funktionalität).</p>
</blockquote>
<p>Ja, davon hab ich auch schon gehört. Momentan finde <code>std::auto_ptr</code> aber noch praktisch. Danke übrigens für den Artikel, den werde ich bei Gelegenheit mal anschauen.</p>
<p>Badestrand schrieb:</p>
<blockquote>
<p>Huch, gute Frage, ob man dann Referenzen in einen Container packen kann. Also ich meine jedenfalls, man kann nicht-kopierbare Objekte in den vector packen (nicht Referenzen auf diese, die Objekte selbst). Das klappt halt, weil ja immer nur eine Instanz existiert und die Algorithmen in der Implementierung nur verschieben und nie kopieren.</p>
</blockquote>
<p>Hmm, ich weiss nur, dass <code>std::auto_ptr</code> diesbezüglich Schwierigkeiten macht. Keine Ahnung wies mit RValue-Referenzen aussieht, haben die überhaupt Objektstatus? Vielleicht werden aber wie du sagst auch Algorithmen sofern möglich kompatibel gemacht. Ich sollte mich mal auf jeden Fall einmal genauer über RValue-Referenzen informieren... <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>
<p>Aber ehrlich gesagt finde ich, braucht man dieses Feature (RValue-Referenzen in Containern) nicht unbedingt. Da kommt man mit momentanen Mitteln wie Boosts Pointer-Container schon sehr gut aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746039</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 19 Jul 2009 23:30:40 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream objekt als rückgabewert? on Sun, 19 Jul 2009 23:31:11 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Kann man das? Referenzen in Containern speichern? Und falls ja, hätte man nicht das gleiche Problem wie mit <code>std::auto_ptr</code> in Containern?</p>
</blockquote>
<p>Ich habe mal gelesen, dass es möglich sein soll. Aber hilf mir mal schnell auf die Sprünge, was war schon wieder das Problem mit <code>std::auto_ptr</code> in einem Container? Es ist spät, ich weiss gerade nur noch, dass man es nicht machen kann, nur nicht mehr wieso <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="🙂"
    /></p>
<p>Badestrand schrieb:</p>
<blockquote>
<p>Hehe, schlechter Zeitpunkt. Irgendwer hatte hier vor ein paar Tagen diesen echt <a href="https://www.boostpro.com/trac/wiki/BoostCon09/RValue101" rel="nofollow">guten Artikel</a> zu den RValue-Referenzen gepostet. Darin steht unter Anderem, dass auto_ptr in C++0x deprecrated wird, aber ersetzt wird durch <code>unique_ptr</code> (aber mit, soweit ich verstanden habe, selber Funktionalität).</p>
</blockquote>
<p>Die Funktionialität ist nur indirekt dieselbe. Ein <code>std::unique_ptr</code> ist eigentlich nichts anders als ein <code>boost::scoped_ptr</code> , welcher weder <em>CopyConstructible</em> noch <em>CopyAssignable</em> ist, was im Gegensatz dazu der <code>std::auto_ptr</code> allerdings ist. Der Unterschied ist, dass der <code>std::unique_ptr</code> <em>MoveConstructible</em> und <em>MoveAssignable</em> ist, wodurch er sich wie ein <code>std::auto_ptr</code> verhalten kann.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746040</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 19 Jul 2009 23:31:11 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream objekt als rückgabewert? on Sun, 19 Jul 2009 23:47:07 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Ich habe mal gelesen, dass es möglich sein soll. Aber hilf mir mal schnell auf die Sprünge, was war schon wieder das Problem mit <code>std::auto_ptr</code> in einem Container? Es ist spät, ich weiss gerade nur noch, dass man es nicht machen kann, nur nicht mehr wieso <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="🙂"
    /></p>
</blockquote>
<p>Folgendes Axiom ist nicht erfüllt:</p>
<pre><code class="language-cpp">T a = b;
assert (a == b);
</code></pre>
<p>Hier können Probleme entstehen, zum Beispiel wenn innerhalb eines Algorithmus eine Kopie eines Elements angelegt wird, das Originalobjekt aber trotzdem nicht verändert werden soll.</p>
<p>Was <code>std::unique_ptr</code> betrifft: Genau, soviel ich verstanden habe, soll er einfach nicht mehr implizit seinen Besitz verschieben, weil das oft zu Problemen führt. Über <code>std::move</code> kann man diese Semantik explizit herbeiführen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746043</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 19 Jul 2009 23:47:07 GMT</pubDate></item><item><title><![CDATA[Reply to ifstream objekt als rückgabewert? on Sun, 19 Jul 2009 23:49:24 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Du scheinst ja recht fasziniert von den neuen Möglichkeiten zu sein... <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="🙂"
    /></p>
</blockquote>
<p>C++ wirkt manchmal leicht angestaubt, da tun die neuen Sprachmittel wirklich gut.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Aber ehrlich gesagt finde ich, braucht man dieses Feature (RValue-Referenzen in Containern) nicht unbedingt. Da kommt man mit momentanen Mitteln wie Boosts Pointer-Container schon sehr gut aus.</p>
</blockquote>
<p>Och, mit &quot;gut lösbar mit reiner std-lib&quot; und &quot;Performance noch und nöcher&quot; gibt's immerhin schon zwei gute Argumente <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746045</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 19 Jul 2009 23:49:24 GMT</pubDate></item></channel></rss>