zoukankan      html  css  js  c++  java
  • 【C++ 补习】Copy Control

    C++ Primer 5th edition, chapter 13.

    The Rule of Three

    • If a class needs a destructor, it almost surely needs a copy constructor and copy-assignment operator as well.

    • If a class needs a copy constructor, it almost surely needs a copy-assignment operator, and vice versa.

    The Copy and Swap Idiom

    Classes that define swap often use swap to define their assignment operator. These operators use a technique known as copy and swap. This technique swaps the left-hand operand with a copy of the right-hand operand. The interesting thing about this technique is that it automatically handles self assignment and is automatically exception safe.

    Rvalue References

    An rvalue reference is a reference that must be bound to an rvalue. Rvalue references have the important property that they may be bound only to an object that is about to be destroyed. As a result, we are free to "move" resources from an rvalue reference to another object.

    As we know, we cannot bind rvalue references to expressions that require a conversion, to literals, or to expressions that return an rvalue. Rvalue references have the opposite binding properties: We can bind an rvalue reference to these kinds of expressions, but we cannot directly bind an rvalue reference to an lvalue.

    The Synthesized Move Operations

    If a class defines its own copy constructor, copy-assignment operator, or destructor, the move constructor and move assignment operator are not synthesized. As a result, some classes do not have a move constructor or a move-assignment operator.

    The compiler will synthesize a move constructor or a move-assignment operator only if the class doesn't define any of its own copy-control members and if every nonstatic data member of the class can be moved. The compiler can move members of built-in type. It can also move members of a class type if the members's class has the corresponding move operation.

  • 相关阅读:
    window.clearInterval与window.setInterval的用法
    <a href=“#”>
    DIV+CSS 中的 overflow:hidden
    @media screen
    VS2010程序打包操作--超详细
    Easy CHM使用简明教程
    垃圾纸盒的叠法-超级实用
    IOS 3D UI --- CALayer的transform扩展
    CGContextAddArc
    CGPathAddArc
  • 原文地址:https://www.cnblogs.com/Patt/p/11517942.html
Copyright © 2011-2022 走看看