boost::noncopyable的实现

boost::noncopyable

最近在看muduo网络库,muduo是基于boost库做开发的。里面很多类是继承自noncopyable,顺手查看了noncopyable类的实现。

noncopyable类的作用

默认情况下,如果类没有声明拷贝构造函数和复制构造函数,编译器会自动的为类创建隐含的public拷贝构造机复制构造函数。
但是noncopyable类的实现是将构造函数与析构函数声明为protected,将拷贝构造函数和复制构造函数申明为private,且为delete。
这就意味着,除了子类自己定义拷贝构造函数或者复制构造函数,外部的调用者不能够通过拷贝构造函数或者复制构造函数创建一个新的子类对象的。

noncopyable的实现

class noncopyable {
private:
    noncopyable(const noncopyable &) = delete;

    void operator=(const noncopyable &) = delete;

protected:
    noncopyable() = default;

    ~noncopyable() = default;
};

//example
class Test : public noncopyable {
public:
    Test(){}
    ~Test(){}
};

// Test通过继承自noncopyable实现了不能够进行拷贝构造以及复制构造
int main(){
	Test t1;  //ok
	//Test t2(t1);  error! class noncopyable has a deleted copy constructor;
	//Test t3 = t1;  error! ...
}

你可能感兴趣的:(C++)