diff options
Diffstat (limited to 'doc/html/move/emulation_limitations.html')
-rw-r--r-- | doc/html/move/emulation_limitations.html | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/doc/html/move/emulation_limitations.html b/doc/html/move/emulation_limitations.html index 449f4e2378..763d8ef3bc 100644 --- a/doc/html/move/emulation_limitations.html +++ b/doc/html/move/emulation_limitations.html @@ -48,24 +48,31 @@ </h3></div></div></div> <p> When initializing base classes in move constructors, users must cast the - reference to a base class reference before moving it. Example: + reference to a base class reference before moving it or just use <code class="computeroutput"><span class="identifier">BOOST_MOVE_BASE</span></code>. Example: </p> -<pre class="programlisting"><span class="comment">//Portable and efficient</span> -<span class="identifier">Derived</span><span class="special">(</span><span class="identifier">BOOST_RV_REF</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">)</span> <span class="identifier">x</span><span class="special">)</span> <span class="comment">// Move ctor</span> - <span class="special">:</span> <span class="identifier">Base</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">Base</span><span class="special">&>(</span><span class="identifier">x</span><span class="special">))),</span> - <span class="identifier">mem_</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">x</span><span class="special">.</span><span class="identifier">mem_</span><span class="special">))</span> <span class="special">{</span> <span class="special">}</span> +<pre class="programlisting"><span class="identifier">Derived</span><span class="special">(</span><span class="identifier">BOOST_RV_REF</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">)</span> <span class="identifier">x</span><span class="special">)</span> <span class="comment">// Move ctor</span> + <span class="special">:</span> <span class="identifier">Base</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">Base</span><span class="special">&>(</span><span class="identifier">x</span><span class="special">)))</span> + <span class="comment">//...</span> +</pre> +<p> + or + </p> +<pre class="programlisting"><span class="identifier">Derived</span><span class="special">(</span><span class="identifier">BOOST_RV_REF</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">)</span> <span class="identifier">x</span><span class="special">)</span> <span class="comment">// Move ctor</span> + <span class="special">:</span> <span class="identifier">Base</span><span class="special">(</span><span class="identifier">BOOST_MOVE_BASE</span><span class="special">(</span><span class="identifier">Base</span><span class="special">,</span> <span class="identifier">x</span><span class="special">))</span> + <span class="comment">//...</span> </pre> <p> If casting is not performed the emulation will not move construct the base class, because no conversion is available from <code class="computeroutput"><span class="identifier">BOOST_RV_REF</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">)</span></code> to <code class="computeroutput"><span class="identifier">BOOST_RV_REF</span><span class="special">(</span><span class="identifier">Base</span><span class="special">)</span></code>. - Without the cast we might obtain a compilation error (for non-copyable types) - or a less-efficient move constructor (for copyable types): + Without the cast or <code class="computeroutput"><span class="identifier">BOOST_MOVE_BASE</span></code> + we might obtain a compilation error (for non-copyable types) or a less-efficient + move constructor (for copyable types): </p> <pre class="programlisting"><span class="comment">//If Derived is copyable, then Base is copy-constructed.</span> <span class="comment">//If not, a compilation error is issued</span> <span class="identifier">Derived</span><span class="special">(</span><span class="identifier">BOOST_RV_REF</span><span class="special">(</span><span class="identifier">Derived</span><span class="special">)</span> <span class="identifier">x</span><span class="special">)</span> <span class="comment">// Move ctor</span> - <span class="special">:</span> <span class="identifier">Base</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">x</span><span class="special">)),</span> - <span class="identifier">mem_</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">x</span><span class="special">.</span><span class="identifier">mem_</span><span class="special">))</span> <span class="special">{</span> <span class="special">}</span> + <span class="special">:</span> <span class="identifier">Base</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">x</span><span class="special">))</span> + <span class="comment">//...</span> </pre> </div> <div class="section"> |