C++11新标准的阻止拷贝方案

来源:互联网 发布:以太网数据帧格式详解 编辑:程序博客网 时间:2024/06/08 18:40

C++11新标准下,可以通过将拷贝构造函数和拷贝赋值运算符定义为删除的函数(deleted function)来阻止拷贝。


删除的函数是这样一种函数:我们虽然声明了他们,但是不能以任何形式使用他们。
通过在参数列表后面加上=delete来指出。

程序:

 /***********************/ // @file    nocopy.cc // @author  lesliefish(yuleics@126.com) /***********************/struct NoCopy{    NoCopy() = default;    //使用合成的默认构造函数    NoCopy(const NoCopy&) = delete;  //阻止拷贝    NoCopy & operator = (const NoCopy&) = delete; //阻止赋值    ~NoCopy() = default; //使用合成的析构函数    //其他成员};

我们可以对任何函数指定=delete。


析构函数不能是删除的成员,如果析构函数被删除,就无法销毁此类型的对象了。

对于删除了析构函数的类型,虽然我们不能定义这种类型的变量或成员,但可以动态分配这种类型的对象。
但是,不能释放这种对象:

 /***********************/ // @file    NoDtor.cc // @author  lesliefish(yuleics@126.com) /***********************/struct NoDtor{    NoDtor() = default; //使用合成的默认构造函数    ~NoDtor() = delete; //不能销毁NoDtor类型对象 };NoDtor nd;                //错误  NoDtor的析构函数是删除的NoDtor *p = new NoDtor(); //正确 但我们不能 delete pdelete p;                //错误  NoDtor的析构函数是删除的
0 0
原创粉丝点击