一、noncopyable类作用

当类实现者不想让调用者拷贝或赋值构造类对象时,继承noncopyable类可达到此目的。

二、noncopyable类实现

	class noncopyable
	{
	protected:
		noncopyable() {}
		~noncopyable() {}
	private:
		noncopyable(const noncopyable&);
		const noncopyable& operator=(const noncopyable&);
	};

	// c++11 实现方法
	class noncopyable
	{
	protected:
		noncopyable() = default;
		~noncopyable() = default;
	private:
		noncopyable(const noncopyable&) = delete;
		const noncopyable& operator=(const noncopyable&) = delete;
	};

三、原理

派生类调用拷贝构造函数或赋值构造函数时, 会调用基类(noncopyable)的拷贝构造函数或赋值构造函数

	class A : public noncopyable {
	public:
		A(int i) {
			i_ = i;
		}
	private:
		int i_;
	};

	//调用
	A a1(55);
	A a2(a1); //error;