IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【muduo/base】对象拷贝控制 -> 正文阅读

[C++知识库]【muduo/base】对象拷贝控制

nocopyable 类

nocopyable功能:让该类的派生类对象无法拷贝

class noncopyable
{
 public:
  noncopyable(const noncopyable&) = delete;
  void operator=(const noncopyable&) = delete;

 protected:
  noncopyable() = default;
  ~noncopyable() = default;
};

分析

如何禁止对象的拷贝

在c++中拷贝发生的时机为:使用赋值号"="赋值和使用a对象初始化b对象时(最常见的是函数按值传参):

假设有class A

A a;
A b(a); //调用拷贝构造函数
b = a; //使用赋值运算符

因此,我们可以禁止赋值运算符和拷贝运算符被用户(包括编译器)调用,来实现禁止对象拷贝的功能。

方法1: 将拷贝构造函数和赋值运算符声明为private
方法2: 将拷贝构造函数和赋值运算符声明为delete
建议方法2。方法1需要我们人为定义函数体,拷贝构造函数和赋值运算符函数还是会存在,只是编译器无法调用,来达到不能拷贝对象的目的。而方法2,直接禁止了拷贝构造函数的生成,以及赋值相关的汇编代码的生成。

为何将构造函数和析构函数声明为protected

将构造函数声明为protected可以禁止nocopyable类的创建,而且可以让其他类继承。如果声明为private,将无法被继承,因为派生类创建对象,需要调用基类构造函数(一些情况下我们定义的子类没有显示调用基类构造函数,编译器会根据默认规则帮我们调用基类的构造构造函数[该部分内容可以在effectivec++中查阅到])以完成基类对象部分的初始化

copyable类

class copyable
{
 protected:
  copyable() = default;
  ~copyable() = default;
};

} 

该类就不做过多介绍了,其他类可以继承该类,以明确知道该类可以做拷贝,算是代码规范吧

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 01:47:11  更:2022-01-14 01:49:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:09:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码