《Effective C++中文版,第三版》读书笔记2
条款06:若不想使用编译器自动生成的函数,就该明确拒绝
为驳回编译器自动()提供的机能,可将相应的成员函数声明为私有的,同时不实现它。
#include <iostream>class MyClass
{
public:MyClass(int ina, int inb) : b(inb), a(b) {}~MyClass() = default;// 可以在其声明后面加上delete修饰,调用时会编译报错// MyClass(const MyClass &) = delete;// MyClass &operator=(const MyClass &) = delete;private:// 可以将其声明为私有的,但是不实现。 有权限调用的报链接错误,无权调用的编译报错说是private的// MyClass(const MyClass&);// MyClass& operator=(const MyClass&);int a; // 这是声明int b;// int a = 10;// int b = 11;
};int main(int argc, char const *argv[])
{MyClass myclassb(11, 12);// MyClass myclassa = MyClass(); // 我们声明了自己的构造函数,编译器不再生成默认版本MyClass myclassc(13, 14);// myclassc = myclassb; // = 被我们声明成了私有,类外调用报‘is private’,其它有权限调用的,会报连接错误(我们没实现)// 以下两种相当于都是调用了拷贝构造函数MyClass myclassa = MyClass(11,13);// 我以为这个调用的是=,但从编译器报错来看,实际调用的是拷贝构造函数MyClass myclassd(myclassb);return 0;
}
条款07: 为多态基类声明virtual析构函数
原因:
C++明确指出,当派生类对象经由一个基类指针被删除,而该基类带有一个non-virtual 析构函数,其结果未定义。
实际上:派生类中的派生类自己的部分没有被删除。仅删除了基类部分。
换一种说法,non-vitual的析构函数,无法触发动态绑定。在析构时,无法调用派生类的析构,只能调用自己的析构。
实际使用中,拒绝继承non-virtual析构函数的class
所有的stl容器都不带任何virtual析构函数
析构函数的运作方式是,最深层派生的哪个class其析构函数最先被调用,然乎其每一个base class的析构函数被调用。
关键知识:
带多态性质的基类应该声明一个virtual析构函数。如果class带有任何virtual函数,那么它就应该拥有一个virtual析构函数
如果一个类设计出来的目的不是作为基类,或者不是为了具有多态性,就别声明virtual析构函数。
条款08:别让异常逃离析构函数
C++不禁止析构函数吐出异常,但是它不喜欢析构函数吐出异常。
析构函数绝对不要吐出异常,如果非要吐异常,那么析构函数应该捕捉异常,然后吞下它们(不往外抛)或结束程序
条款09: 绝不在构造和析构过程中调用virtual函数
一个意思的两种说法:
派生类的基类构造期间virtual函数绝不会下降到派生类的阶层
在派生类的基类构造期间,virtual函数不是virtual函数(个人感觉:基类构造期间,其virtual函数失去动态绑定属性)
条款10:令operator=返回一个reference to *this
原因:
为了实现连锁赋值
所有赋值相关的运算都应该遵守这个协议
所有内置类型和标准程序库提供的类型都遵守这一协议
条款11: 在operator=中处理’‘自我赋值”
解决方法:
1.在确定’‘资源管理对象’在copy发生时由正确的举措,那么可以使用对象来管理资源。
2.写一段“证同测试”达到自我赋值检测的目的
3.关注"异常安全性",从而精心安排语句。
4.使用copy and swap技术,为传入的数据做一个备份,然后把*this的数据和复件做交换
条款12:复制对象时勿忘其每一个成分
原因:
当你实现自己的copying函数,实现代码中几乎必然出错时,编译器不会告诉你。
copying 函数
copy构造函数和copy assignment操作符
具体解释:
当编写一个copying函数,确保复制所有local成员变量,调用所有基类的适当的copying函数
注意事项:
copy assignment操作符不要调用copy构造函数
copy构造函数不要调用copy assignment操作符
实际操作:
若copy构造函数和copy assignment操作符有相近的代码,那么就写个私有的函数(通常叫init)让他俩调用。
相关文章:
《Effective C++中文版,第三版》读书笔记2
条款06:若不想使用编译器自动生成的函数,就该明确拒绝 为驳回编译器自动()提供的机能,可将相应的成员函数声明为私有的,同时不实现它。 #include <iostream>class MyClass { public:MyClass(int in…...
虫情测报系统的工作原理及功能优势
KH-CQPest虫情测报系统能够在不对虫体造成任何破坏的情况下,无公害的杀死虫子,利用高倍显微镜和高清摄像头拍摄虫体照片,并将虫体照片发送到远端平台,让工作人员无需要到现场,通过平台就可以观察害虫的种类和数量&…...
UWB定位技术详细介绍
UWB(Ultra-Wideband)定位技术是一种通过利用信号的超宽频带特性进行高精度定位的技术。其原理是通过测量信号在空间传播中的时间延迟差异来计算物体的位置。 UWB技术与传统无线通信技术不同,它利用非常宽的频带进行通信,通常超过…...
PiplineADC学习一:
PiplineADC结构: PiplineADC起源之FlashADC PiplineADC起源之Sub-Ranging-ADC 比较器存在失调: 因此每级1bit不实用,需要做冗余位设计。 多比较一次,两个阈值,三个区间,分别对于输出00,01,10。正常2bit应该…...
Linux elasticsearch设置为开机自启动服务
Linux elasticsearch怎么设置为设置为开机自启动服务 1、进入/etc/init.d目录 cd /etc/init.d 2、新建文件elasticsearch,注意,没有扩展名 vi elasticsearch 3、新建文件elasticsearch的内容如下 说明: (1)“su…...
WinForm内嵌Unity3D
Unity3D可以C#脚本进行开,使用vstu2013.msi插件,可以实现在VS2013中的调试。在开发完成后,由于项目需要,需要将Unity3D嵌入到WinForm中。WinForm中的UnityWebPlayer Control可以载入Unity3D。先看效果图。 一、为了能够动态设置ax…...
关于vue中v-for绑定数据重新渲染的问题
我修改被v-for绑定的数据,发现居然不能重新渲染。 查找后得知一下方法: $set 是 Vue 提供的一个全局方法,用于向响应式对象中添加或更新属性,并触发视图更新。它接受三个参数:对象、要添加/更新的属性名或索引,以及新…...
全面解析 Axios 请求库的基本使用方法
Axios 是一个流行的基于 Promise 的 HTTP 请求库,用于在浏览器和 Node.js 中进行 HTTP 请求。它提供了简单易用的 API,可以发送各种类型的请求(如 GET、POST、PUT、DELETE等),并处理响应数据,Axios 在前端工…...
rust踩雷笔记3——生命周期的理解
目录 概念和基本使用一个例子彻底理解最基本的内容 一个例子理解函数签名为什么要有生命周期标注⭐️能不能对编译器蒙混过关? 生命周期是rust中最难的概念——鲁迅 这一块内容即便是看rust圣经,第一遍也有点懵。今天早上二刷突然有了更直观的认识&…...
windows权限维持—黄金白银票据隐藏用户远控RustDeskGotoHttp
windows权限维持—黄金白银票据&隐藏用户&远控&RustDesk&GotoHttp 1. 前置1.1. 初始问题1.1.1. 解决办法 2. 隐藏用户2.1. 工具原理2.2. 案例操作2.2.1. 单机添加用户2.2.1.1. 工具添加用户2.2.1.2. 工具查看隐藏用户2.2.1.3. 本地查看隐藏用户 2.2.2. 域内添加…...
vscode conda activate激活环境出错
vscode conda activate 出错 conda-script.py: error: argument COMMAND: invalid choice: ‘activate’ To initialize your shell, run$ conda init <SHELL_NAME>Currently supported shells are:- bash- fish- tcsh- xonsh- zsh- powershellSee conda init --help f…...
信息与通信工程面试准备——数学知识|正态分布|中心极限定理
目录 正态分布 正态分布的参数 正态分布的第一个参数是均值 正态分布的第二个参数是标准差SD 所有正态分布的共同特征 标准正态分布:正态分布的特例 中心极限定理 理解定义 示例# 1 示例# 2 知道样本均值总是正态分布的实际含义是什么? 正态分…...
Mybatis多表查询与动态SQL的使用
目录 1. Mybatis多表查询 1.1 添加文章表实体类 1.2 文章Interface 1.3 文章.xml 1.4 lombok的toString()有关对象打印的说明 1.5 场景: 一个用户查询多篇文章 2. 复杂情况: 动态SQL的使用 2.1 为什么要使用动态SQL? 2.2 <if>标签 2.3 <trim>标签 2.4 <where&g…...
url 和 uri 有什么区别?
URL(Uniform Resource Locator)和URI(Uniform Resource Identifier)是两个与网络资源定位和标识相关的概念,它们有一些区别,但也存在一些重叠。 URI(Uniform Resource Identifier)是…...
HCIP VLAN实验
VLAN实验 拓扑图配置和分析分析配置LSW1LSW2R1 测试dhcp获取ipICMP测试 拓扑图 配置和分析 分析 从题目来看,因为 pc 1 3都是vlan2而且还是不同网段,pc 2 4 5 6在同一网段,所以可以将pc 1 2 5 4 6分在一个网段 pc4不通5 6 ,那就…...
无涯教程-Perl - waitpid函数
描述 该函数等待ID为PID的子进程终止,返回已故进程的进程ID。如果PID不存在,则返回-1。进程的退出状态包含在$?中。 可以将标志设置为各种值,这些值等于waitpid()UNIX系统调用使用的值。 FLAGS的值为0应该在支持进程的所有操作系统上工作。 语法 以下是此函数的简单语法- …...
Redis之缓存雪崩、缓存击穿、缓存穿透问题
文章目录 前言一、缓存雪崩1.1、原因分析2.2、常用解决方案 二、缓存击穿2.1、原因分析2.2、常用解决方案2.2.1、使用互斥锁2.2.2、逻辑过期方案2.3、方案对比 三、缓存穿透3.1、原因分析3.2、解决方案3.2.1、缓存空对象3.2.3、布隆过滤3.3、方案对比 总结 前言 本文谈谈Redis…...
九五从零开始的运维之路(其三十五)
文章目录 前言一、概述1.概念2.组成3.特点4.工作原理5.优点: 二、各节点及其ip地址三、构建MHA1.ssh免密登录2.构建mysql主从复制(一)安装mariadb数据库并启动(二)master服务器(三)slave服务器&…...
5G科技防汛,助力守护一方平安
“立秋虽已至,炎夏尚还在”,受台风席卷以及季节性影响全国多地正面临强降水的严峻挑战。“落雨又顺秋,绵绵雨不休”,正值“七下八上” 防汛关键时期,贵州省水文水资源局已全面进入备战状态。 为确保及时响应做好防汛抢…...
用easyui DataGrid编辑树形资料
easyui显示编辑树形资料有TreeGrid元件,但是这个元件的vue版本和react版本没有分页功能。virtual scroll功能也表现不佳。 我用DataGrid来处理。要解决的问题点: (1)如何显示成树形。即,子节点如何有缩进。 先计算好…...
美胸-年美-造相Z-Turbo真实案例:快速生成24套手游服装方案
美胸-年美-造相Z-Turbo真实案例:快速生成24套手游服装方案 1. 项目背景与挑战 在手游《幻境物语》的角色设计阶段,美术团队面临一个紧迫需求:为游戏中的"花语使者"职业设计24套不同风格的服装方案。传统手工绘制方案需要至少3周时…...
基于springboot运动服装销售系统设计与开发(源码+精品论文+答辩PPT等资料)
博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...
SRS + FFmpeg WebRTC 循环推流环境搭建
SRS FFmpeg WebRTC 循环推流环境搭建指南 本指南介绍如何使用 Docker Compose 快速搭建一个基于 SRS (Simple Realtime Server) 的流媒体测试环境。 推流协议:RTMP (FFmpeg 模拟推流)拉流协议:WebRTC (低延迟播放)特性:视频循环播放、不保存…...
上周刚把三菱PLC+MCGS的电机测速课设收尾,趁着热乎劲把细节唠唠,顺便把踩过的坑也记一下,省得下次忘光
No.1235 基于三菱 PLC和MCGS组态电机测速系统控制设计这个项目说白了就是用三菱PLC算电机的转速,再用MCGS组态屏把转速实时显示出来,用到的东西挺基础:FX3U PLC、1000线增量式编码器、直流减速电机、MCGS组态屏,再加一根USB转RS48…...
零代码玩转OpenClaw:ollama-QwQ-32B自动化脚本生成教程
零代码玩转OpenClaw:ollama-QwQ-32B自动化脚本生成教程 1. 为什么选择OpenClawollama-QwQ-32B组合? 上周我在整理旅行照片时,面对上千张命名混乱的图片文件,突然意识到:这不正是测试OpenClaw自动化能力的绝佳场景吗&…...
如何通过WechatRealFriends解决微信单向好友检测难题
如何通过WechatRealFriends解决微信单向好友检测难题 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 在数字化社…...
RBD_Timer:嵌入式轻量级多定时器时间轮调度框架
1. RBD_Timer 库深度解析:面向嵌入式实时系统的轻量级多定时器管理框架1.1 问题根源:Arduino 原生delay()与中断阻塞对实时性的破坏在 Arduino 生态中,delay()函数被广泛用于实现时间等待逻辑。然而其底层实现本质是忙等待(busy-w…...
JiYuTrainer:极域电子教室多任务学习解决方案 - 提升教学环境下的自主操作能力
JiYuTrainer:极域电子教室多任务学习解决方案 - 提升教学环境下的自主操作能力 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 在现代数字化教学环境中,极…...
如何彻底告别微软Edge浏览器:EdgeRemover专业卸载工具完全指南
如何彻底告别微软Edge浏览器:EdgeRemover专业卸载工具完全指南 【免费下载链接】EdgeRemover PowerShell script to remove Microsoft Edge in a non-forceful manner. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover 你是否曾经尝试卸载Microsof…...
Sourcetrail实战:如何利用可视化分析加速大型C++项目代码理解
1. 为什么大型C项目需要可视化分析工具 接手一个百万行级别的C项目是什么体验?我第一次接触MariaDB源码时,面对层层嵌套的类继承、错综复杂的函数调用链,光是理清handler类的派生关系就花了整整两天。这种经历让我深刻意识到:传统…...
