猫猫哥

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
using namespace std;
class Dog {};

/* C++ 03
 * 1 默认构造函数(只有当用户没有声明任何构造函数)
 * 2 拷贝构造(只有当用户没有声明5,6),扩展到C++11之后(只有当用户没有声明3,4,5,6)
 * 3 拷贝赋值(只有当用户没有声明5,6),扩展到C++11之后(只有当用户没有声明2,4,5,6)
 * 4 析构函数

 * C++ 11
 * 5 移动构造(只有当用户没有声明2,3,4,6)
 * 6 移动赋值(只有当用户没有声明2,3,4,5)


// 看一些例子
class Cat {    //编译器产生3,4    (C++11中,3弃用)
    Cat(const Cat& ) {} //拷贝构造
};

class Duck {    //编译器产生4    
    Duck(Duck&&) {}   //移动构造
};

class Frog {    //编译器产生4
    Frog(Frog&&, int  = 0) {}   //移动构造
    Frog(int = 0) {}   //默认构造
    Frog(const Frog&, int = 0) {}    //拷贝构造
};

class Fish {    //编译器产生1,2,3(C++11中,2,3弃用)
    ~Fish()    
};

class Cow {    //编译器产生1,2,4(C++11中,2弃用,如果要用需要显式地叫回)
    Cow& operator=(const Cow&) {}   = delete; //拷贝赋值禁用,虽然禁用仍然认为是用户声明了
    Cow(const Cow&) {} = default;     //显式地叫回编译器定义的拷贝构造
};

posted on 2018-12-30 14:16  猫猫哥  阅读(310)  评论(0编辑  收藏  举报