C++ 之阻止拷贝

1.编译器会自动生成的函数

当定义一个类时,如果没有声明构造函数、析构函数、拷贝构造函数和拷贝赋值运算符,缺少其中的哪个,编译器就会为它声明一个(编译版本的)对应的函数;

2.阻止拷贝

阻止拷贝有两种方法:

方法一

在新标准下,将拷贝构造函数和拷贝赋值运算符定义为删除函数(delete function),使用方法如下:

Struct NoCopy

{

NoCopy();  //...

NoCopy(const NoCopy&)=delete;

NoCopy& operator=(const NoCopy&)=delete;

//...

}

方法二:

将拷贝构造函数和拷贝赋值运算符声明为私有的且不予实现,使用方法如下:

class NoCopy

{

NoCopy();  //...

private:

NoCopy(const NoCopy&);

NoCopy& operator=(const NoCopy&);

//...

}

当NoCopy的一个对象去给另一个对象赋值或者执行拷贝操作时,会出现一个未定义的成员导致一个链接时错误,因为函数被定义为private私有的;

当成员函数或者友元函数驶入来呗时,也将出现导致链接时错误,因为没有实现;

综上所述,一般推荐使用方法一来完成阻止拷贝操作。

猜你喜欢

转载自www.cnblogs.com/jiayouya-susu/p/11962146.html