• =default&=delete
    class Foo
    {
    public:
    	Foo(int i) :_i(i) { cout << "Foo(int i)\n"; }
    	Foo()  = default;  //可以跟上一个构造函数并存(构造函数可以多个并存)
    	
    	Foo(const Foo& x) :_i(x._i) {}  //拷贝构造函数只能有一个,不能被重载
    	//!Foo(const Foo& x) =default;  //[ERROR]
    	//!Foo(const Foo& x) =delete;   //[ERROR]
    
    	//拷贝赋值函数同拷贝构造函数
    	Foo& operator=(const Foo& x) { _i = x._i;  return *this; }
    	
    	// =default 只能出现在默认构造函数、复制/移动构造函数、
    	// 复制/移动运算符和析构函数中
    	//!void func1() = default;  //[ERROR]:this function cannot be default
    	void func2() = delete; //OK
    
    	/*造成使用 Foo object 时出错
    	  =>[Error]use of deleted function 'Foo::~Foo()'*/
    	//!~Foo() = delete; 
    	~Foo() = default;  //OK
    
    	/*
    	=default;用于Big-Five之外无意义,编译器报错
    	=delete;可用于任何函数身上,希望子类定义(=0只能用于virtual函数)
    	void func2() = 0; [Error] =0只能用于virtual函数
    	*/
    
    private:
    	int _i;
    };
    
    
    int main()
    {
    	Foo f1(5);
    	Foo f2; //如果没有写出 =default 版本=>[ERROR]不能调用
    	Foo f3(f1);/*如果copy ctor =delete;[Error]use of deleted function
    	Foo(const Foo & x) :_i(x._i)*/
    	f3 = f2;/*如果copy assign = delete; [Error] use of deleted function
    			'Foo& Foo::operator'*/
    
    
    
    	cout << endl;
    	return 0;
    }