<?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[move semantik richtig verstanden?(folgende 5 Codezeilen blödsinn?)]]></title><description><![CDATA[<p>Hi, ich hab movesemantik nun so verstanden, dass</p>
<pre><code class="language-cpp">bar b;
bar b2(move(b));
b.foo();
b2.bar();
</code></pre>
<p>auf jeden Fall Blödsinn ist(auch wenn es kompiliert, könnten sich pointer teilen oder auch nicht), hab ich das richtig verstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/291657/move-semantik-richtig-verstanden-folgende-5-codezeilen-blödsinn</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 14:06:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291657.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Aug 2011 22:22:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to move semantik richtig verstanden?(folgende 5 Codezeilen blödsinn?) on Tue, 23 Aug 2011 22:22:47 GMT]]></title><description><![CDATA[<p>Hi, ich hab movesemantik nun so verstanden, dass</p>
<pre><code class="language-cpp">bar b;
bar b2(move(b));
b.foo();
b2.bar();
</code></pre>
<p>auf jeden Fall Blödsinn ist(auch wenn es kompiliert, könnten sich pointer teilen oder auch nicht), hab ich das richtig verstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109872</guid><dc:creator><![CDATA[yeanno]]></dc:creator><pubDate>Tue, 23 Aug 2011 22:22:47 GMT</pubDate></item><item><title><![CDATA[Reply to move semantik richtig verstanden?(folgende 5 Codezeilen blödsinn?) on Tue, 23 Aug 2011 22:36:10 GMT]]></title><description><![CDATA[<p>Um das zu beurteilen, müsste man schon ein aussagekräftiges Beispiel mit sinnvollen Bezeichnern haben. Was hast du vor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109877</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 23 Aug 2011 22:36:10 GMT</pubDate></item><item><title><![CDATA[Reply to move semantik richtig verstanden?(folgende 5 Codezeilen blödsinn?) on Tue, 23 Aug 2011 22:38:24 GMT]]></title><description><![CDATA[<p>Wenn die Objekte sich pointer teilen würden, würden sie ja doppelt gelöscht, also müssten alle pointer von b auf NULL gesetzt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109878</guid><dc:creator><![CDATA[Cachus]]></dc:creator><pubDate>Tue, 23 Aug 2011 22:38:24 GMT</pubDate></item><item><title><![CDATA[Reply to move semantik richtig verstanden?(folgende 5 Codezeilen blödsinn?) on Tue, 23 Aug 2011 22:42:46 GMT]]></title><description><![CDATA[<p>Hi yeanno,</p>
<p>in Zeile 2 bewirkt das std::move, dass der Move-Konstruktor statt des Copy-Kontruktors aufgerufen werden kann.<br />
In der Regel erlaubt die Übergabe einer rvalue-Referenz (somit hier der Parameter des Move-Konstruktors), dass dieses Objekt (inhaltlich) zerstört werden darf. Es muss lediglich der Destruktor dieses Objektes noch aufrufbar sein. Somit ist in Zeile 3 der Aufruf einer Funktion auf einem 'zerstörten' Objekt.<br />
Wenn ich von zerstört rede, werden z. B. irgendwelche Zeiger in dem Objekt nach der Zeile 2 NULL sein. Die 4. Zeile wäre wieder problemlos möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109880</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 23 Aug 2011 22:42:46 GMT</pubDate></item><item><title><![CDATA[Reply to move semantik richtig verstanden?(folgende 5 Codezeilen blödsinn?) on Tue, 23 Aug 2011 22:46:17 GMT]]></title><description><![CDATA[<blockquote>
<p>In der Regel erlaubt die Übergabe einer rvalue-Referenz (somit hier der Parameter des Move-Konstruktors), dass dieses Objekt (inhaltlich) zerstört werden darf. Es muss lediglich der Destruktor dieses Objektes noch aufrufbar sein. Somit ist in Zeile 3 der Aufruf einer Funktion auf einem 'zerstörten' Objekt.<br />
Wenn ich von zerstört rede, werden z. B. irgendwelche Zeiger in dem Objekt nach der Zeile 2 NULL sein.</p>
</blockquote>
<p>darum gings mir, danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109882</guid><dc:creator><![CDATA[Yeanno]]></dc:creator><pubDate>Tue, 23 Aug 2011 22:46:17 GMT</pubDate></item><item><title><![CDATA[Reply to move semantik richtig verstanden?(folgende 5 Codezeilen blödsinn?) on Tue, 23 Aug 2011 22:55:33 GMT]]></title><description><![CDATA[<p>Gern geschehen...</p>
<p>als kleines Beispiel noch:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 

class bar{
public:
	bar(int val) : i(new int(val)){}
	bar(const bar&amp; b) : i(new int(*b.i)) {} // Copy-Constructor
	bar(bar&amp;&amp; b) : i(b.i) { b.i=0; } // Move-Constructor
	~bar() { delete i; } // delete 0 ist erlaubt

	void print(){
		if(!i)
			std::cout &lt;&lt; &quot;object internally destroyed -&gt; crash&quot; &lt;&lt; std::endl;
		std::cout &lt;&lt; *i &lt;&lt; std::endl;
	}

private:
	int* i;
}; 

int main() {
	bar b1(2);
	bar b2(b1);
	b1.print();
	b2.print();
	bar b3(std::move(b1));
	b3.print();
	b1.print(); // ui...
}
</code></pre>
<blockquote>
<p>2<br />
2<br />
2<br />
object internally destroyed -&gt; crash<br />
Segmentation fault</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2109885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109885</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Tue, 23 Aug 2011 22:55:33 GMT</pubDate></item></channel></rss>