<?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[Wird der Move-Ctor nu default-generiert oder nicht?]]></title><description><![CDATA[<p>Ich bin grade ei wenig stutzig geworden, als ich feststellen musste, dass ein von mir angenommener generierter Move-Ctro nicht zu existieren schien:</p>
<pre><code class="language-cpp">#include &lt;utility&gt;
  class nc
  {
   protected:
      nc() {}
      ~nc() {}
   private:  
      nc( const nc&amp; ); //verhindert nc(nc&amp;&amp;)
      const nc&amp; operator=( const nc&amp; );
  };

struct Base : nc //oder boost::noncopyable, ist das Selbe
{
  Base(Base&amp;&amp;) {} //wird wegen fehlendem nc(nc&amp;&amp;) nicht generiert
  Base() {}       //wird wegen Base(Base&amp;&amp;) nicht generiert
};

struct Derived : Base
{
  //hier sollte hier generiert werden!
};

int main()
{
   Derived d1;
   Derived d2(std::move(d1));
}
</code></pre>
<p>Sowohl gcc-4.5.1 als auch MSVC2010 spucken hier Zähne, weil sie den COPY-Ctor nicht erstellen können (wegen privatem nc(nc const&amp;))<br />
Dabe wird hier doch garnichts kopiert sondern gemoved?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/303316/wird-der-move-ctor-nu-default-generiert-oder-nicht</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 13:51:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303316.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 May 2012 18:34:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wird der Move-Ctor nu default-generiert oder nicht? on Thu, 10 May 2012 18:34:53 GMT]]></title><description><![CDATA[<p>Ich bin grade ei wenig stutzig geworden, als ich feststellen musste, dass ein von mir angenommener generierter Move-Ctro nicht zu existieren schien:</p>
<pre><code class="language-cpp">#include &lt;utility&gt;
  class nc
  {
   protected:
      nc() {}
      ~nc() {}
   private:  
      nc( const nc&amp; ); //verhindert nc(nc&amp;&amp;)
      const nc&amp; operator=( const nc&amp; );
  };

struct Base : nc //oder boost::noncopyable, ist das Selbe
{
  Base(Base&amp;&amp;) {} //wird wegen fehlendem nc(nc&amp;&amp;) nicht generiert
  Base() {}       //wird wegen Base(Base&amp;&amp;) nicht generiert
};

struct Derived : Base
{
  //hier sollte hier generiert werden!
};

int main()
{
   Derived d1;
   Derived d2(std::move(d1));
}
</code></pre>
<p>Sowohl gcc-4.5.1 als auch MSVC2010 spucken hier Zähne, weil sie den COPY-Ctor nicht erstellen können (wegen privatem nc(nc const&amp;))<br />
Dabe wird hier doch garnichts kopiert sondern gemoved?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2210280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2210280</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 10 May 2012 18:34:53 GMT</pubDate></item><item><title><![CDATA[Reply to Wird der Move-Ctor nu default-generiert oder nicht? on Thu, 10 May 2012 18:41:20 GMT]]></title><description><![CDATA[<p>Nächstes Verständnisproblem:</p>
<pre><code class="language-cpp">#include &lt;utility&gt;
  class noncopyable
  {
   protected:
      noncopyable() {}
      ~noncopyable() {}
   private:  // emphasize the following members are private
      noncopyable( const noncopyable&amp; );
      const noncopyable&amp; operator=( const noncopyable&amp; );
  };

struct Base : noncopyable
{
  Base() = default;
  Base(Base&amp;&amp;) {}
};

struct Derived : Base
{
  Derived() = default;
  Derived(Derived&amp;&amp;) {}
};

int main()
{
   Derived d1;
   Derived d2(d1);
}
</code></pre>
<p>Hier darf meines Wissens kein copy-ctor generiert werden, weil sowohl Base als auch Derived Move-Ctoren definiert haben. Dennoch macht GCC erst bei nc(nc const&amp;) die grätsche, versucht also lustig sowohl für Base als auch für Derived den Copy-Ctor zu generieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2210281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2210281</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 10 May 2012 18:41:20 GMT</pubDate></item><item><title><![CDATA[Reply to Wird der Move-Ctor nu default-generiert oder nicht? on Thu, 10 May 2012 18:45:26 GMT]]></title><description><![CDATA[<p>GCC 4.6 schluckt das ohne Mucken. edit: Das bezieht sich auf den ersten Beitrag, du warst schneller als ich.</p>
<p>edit2: Dafür schluckt GCC 4.6 den zweiten Code wiederum nicht. Und sagt (meiner Meinung nach) richtigerweise:</p>
<pre><code>In function ‘int main()’:
29:17: error: cannot bind ‘Derived’ lvalue to ‘Derived&amp;&amp;’
22:3: error:   initializing argument 1 of ‘Derived::Derived(Derived&amp;&amp;)’
</code></pre>
<p>Oder meintest du hier was anderes?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2210282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2210282</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 10 May 2012 18:45:26 GMT</pubDate></item><item><title><![CDATA[Reply to Wird der Move-Ctor nu default-generiert oder nicht? on Thu, 10 May 2012 19:55:27 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>GCC 4.6 schluckt das ohne Mucken. edit: Das bezieht sich auf den ersten Beitrag, du warst schneller als ich.</p>
<p>edit2: Dafür schluckt GCC 4.6 den zweiten Code wiederum nicht.</p>
</blockquote>
<p>Genau so sollte es sein. Aber MSVC enttäuscht mich leider immer weiter was C++11 angeht <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/2210306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2210306</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 10 May 2012 19:55:27 GMT</pubDate></item><item><title><![CDATA[Reply to Wird der Move-Ctor nu default-generiert oder nicht? on Thu, 10 May 2012 20:10:10 GMT]]></title><description><![CDATA[<p>Siehe <a href="http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport" rel="nofollow">http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport</a>. GCC 4.6 kann RValue Refenzen V3.0, während MSVC nur 2.1 kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2210316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2210316</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 10 May 2012 20:10:10 GMT</pubDate></item><item><title><![CDATA[Reply to Wird der Move-Ctor nu default-generiert oder nicht? on Thu, 10 May 2012 21:43:04 GMT]]></title><description><![CDATA[<p>Wow, Clang hat ja wirklich GCC überholt, obwohl es vor Kurzem noch fast nichts im Bezug auf C++11 gab. Scheint echt produktiv zu sein, einen Compiler von Grundauf neu zu schreiben, haben ja in Windeseile komplett C++03 und jetzt auch C++11 implementiert, was die ganzen Dinosaurier nicht schaffen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2210358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2210358</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 10 May 2012 21:43:04 GMT</pubDate></item></channel></rss>