首页 > 编程语言 > 详细

C++ 之阻止拷贝

时间:2019-11-30 13:56:55      阅读:80      评论:0      收藏:0      [点我收藏+]

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私有的;

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

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

 

 

C++ 之阻止拷贝

原文:https://www.cnblogs.com/jiayouya-susu/p/11962146.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!