基础知识:类的拷贝与控制

  主要内容:拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符、析构函数


  •  拷贝构造函数:
    1. 形式 
      class Foo {
      
          Foo(const Foo &)//拷贝构造函数      
      }
      拷贝构造函数的第一个参数是自身类型的引用

       

    2. 合成拷贝构造函数会将对象中依次每个非static成员拷贝到正在创建的对象中;如果对象的成员中有类,会调用类的拷贝构造函数,如果对象成员有数组,那么合成拷贝构造函数会逐元素拷贝
    3. 拷贝初始化发生的情况(一般由拷贝构造函数和移动构造函数完成):  
      1. “=”定义变量
      2. 将一个对象作为实参传递给一个非引用类型的形参:在函数调用的过程中,具有非引用类型的参数要进行拷贝初始化;类似的,当一个函数具有非引用的返回类型时,也会进行拷贝初始化
      3. 用花括号列表初始化一个数组中的元素或者一个聚合类中的成员

      4、编译器可以通过直接初始化绕过拷贝初始化


  • 拷贝赋值运算符
        1. 形式:
          class Foo{
             Foo& operator = (const Foo &){
                 ;;;;
             return *this
            }//赋值运算符
          }

           

    1. 合成拷贝赋值运算符:和拷贝构造函数类似
    2. 总结:其实就是重载运算符“=”

  • 析构函数:释放资源,销毁对象的非static数据成员
    1. 执行情况:变量离开作用域;对象被销毁;容器被销毁时,其元素也被销毁;动态分配对象的delete;创建临时对象的完整表达式的结束
    2. 合成析构函数
    3. 总结:注意RAII的运用;C++管理资源的时候自然形成的最佳表达方式就是RAII

注意:以上的函数可以定义为delete(除了析构函数)

 


 

移动构造函数和移动赋值运算符,再说吧,记住和右值引用有关(&&)!

posted @ 2018-03-23 16:33  JerrfyChan  阅读(102)  评论(0)    收藏  举报