NonCopyable

NonCopyable 是 C++ 用于阻止派生类生成拷贝构造和拷贝赋值函数的一个通用类,在很多地方都有使用,例如 arm、boost等,在 effective c++ 中也有讲到,以下是一种使用方法:

class NonCopyable {
private:NonCopyable(const NonCopyable &);NonCopyable& operator=(const NonCopyable &);
protected:NonCopyable() {}~NonCopyable() {}
};class Derive : public NonCopyable {};

将拷贝构造和拷贝赋值设为私有成员,子类无法访问,通过该方式实现上述功能,当然更合理的写法是采用 delete 操作符

class NonCopyable {
public:NonCopyable(const NonCopyable &) = delete;NonCopyable& operator=(const NonCopyable &) = delete;
protected:NonCopyable() = default;~NonCopyable() = default;
};class Derive : public NonCopyable {};

这样显示的告诉编译器,禁止生成拷贝构造和拷贝赋值函数。可以做实现验证这一点:

class NonCopyable {
public:NonCopyable(const NonCopyable &) = delete;NonCopyable& operator=(const NonCopyable &) = delete;
protected:NonCopyable() = default;~NonCopyable() = default;
};class Derive : public NonCopyable {
public:Derive(int _a) : a(_a) {}Derive() {}Derive(const Derive& tmp) : NonCopyable(tmp) {std::cout << "copy constructor has call\n";this->a = tmp.a;}Derive& operator=(const Derive& tmp) : NonCopyable(tmp) {NonCopyable::operator=(tmp);std::cout << "copy assignment has call\n";this->a = tmp.a;return *this;}
private:int a;
}

这是一个正确的测试案例,注意 Derive 类的拷贝构造和拷贝赋值写法,如果省略掉基类信息(NonCopyable),那么在调用 Derive 的拷贝构造和拷贝赋值时,NonCopyable 实际上调用的是构造函数,从而丧失了目标功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/607919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dart中令人惊艳的用法

Dart是谷歌开发的现代化编程语言&#xff0c;凭借其简洁的语法和强大的功能&#xff0c;在开发者当中赢得了极高的声誉&#xff0c;尤其是在Flutter框架中发挥了巨大的作用。本文将介绍Dart中的8个令人惊艳的用法&#xff0c;这些用法不仅技术深度足够&#xff0c;充满启发性&a…

Elasticsearch基本操作之文档操作

本文来说下Elasticsearch基本操作之文档操作 文章目录 文档概述创建文档示例创建文档(生成随机id)创建文档(自定义唯一性标识) 查看文档示例根据主键查看文档查看所有文档 修改文档示例全局修改文档局部修改文档 删除文档示例根据文档的唯一性标识删除文档条件删除文档 本文小结…

C++之返回值优化

返回值优化&#xff08;Return value optimization&#xff0c;缩写为RVO&#xff09;是C的一项编译优化技术。它最大的好处是在于&#xff1a; 可以省略函数返回过程中复制构造函数的多余调用&#xff0c;解决 “C 中长久以来为人们所诟病的临时对象的效率问题”。 我们先谈正…

【leetcode 447. 回旋镖的数量】审慎思考与推倒重来

447. 回旋镖的数量 题目描述 给定平面上 **n **对 互不相同 的点 points &#xff0c;其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 &#xff0c;其中 i 和 j 之间的距离和 i 和 k 之间的欧式距离相等&#xff08;需要考虑元组的顺序&#xff09;。 返回平…

Linux引导过程和服务

一、Linux操作系统引导过程 1.引导过程 bios 加电自检——mbr——grub——加载内核——启动进程 加电后BIOS程序回自检硬件&#xff0c;硬件无故障后&#xff0c;会根据第一次启动项去找内核&#xff0c;一般来说第一启动项是硬盘&#xff0c;找到硬盘后&#xff0c;会根据mb…

2. Mybatis 中SQL 执行原理

这里有两种方式&#xff0c;一种为常用的 Spring 依赖注入 Mapper 的方式。另一种为直接使用 SqlSessionTemplate 执行 Sql 的方式。 Spring 依赖注入 Mapper 的方式 Mapper 接口注入 SpringIOC 容器 Spring 容器在扫描 BeanDefinition 阶段会扫描 Mapper 接口类&#xff0c…

深入了解网络流量清洗--使用免费的雷池社区版进行防护

​ 随着网络攻击日益复杂&#xff0c;企业面临的网络安全挑战也在不断增加。在这个背景下&#xff0c;网络流量清洗成为了确保企业网络安全的关键技术。本文将探讨雷池社区版如何通过网络流量清洗技术&#xff0c;帮助企业有效应对网络威胁。 ![] 网络流量清洗的重要性&#x…

第四站:指针的进阶-(二级指针,函数指针)

目录 二级指针 二级指针的用途 多级指针的定义和使用 指针和数组之间的关系 存储指针的数组(指针数组:保存地址值) 指向数组的指针(数组指针) 传参的形式(指针) 数组传参时会退化为指针 void类型的指针 函数指针 定义: 调用:两种方式:(*指针名)(参数地址) 或者 指针…

别闹了,真的不是你的技术菜!!!

最近经常听到有小伙伴总是在抱怨自己的技术菜&#xff0c;公司没有机会让自己去成长技术&#xff0c;于是小编就此场景来写一篇文章&#xff0c;希望对大家有帮助。 错误的理解CRUD工程师 CRUD工程师这个名称是很多小伙伴都听过的&#xff0c;并且很多工程师都把自己比作是代…

Ubuntu 18.04.5 LTS 解决安装包复杂依赖相关问题解决的主要法则和VIM的安装实录

前言&#xff1a;目标和环境 环境&#xff1a; Ubuntu 18.04.5 LTSVMware 目标&#xff1a; 安装vim&#xff0c;解决包依赖的冲突&#xff1a; 本文&#xff0c;通过一个很好的实例&#xff0c;诠释了&#xff0c;LINUX系统下&#xff0c;安装一个应用遇到的依赖库问题如何…

Wilcoxon秩和检验-校正P值(自备)

R语言 boxplot作图 图内展示校正后的P值(padj)_r语言 p值校正-CSDN博客 FDR错误发现率-P值校正学习_fdr和p值的关系-CSDN博客 原理介绍&#xff1a; Benjamini-Hochberg 方法介绍 有N次假设检验&#xff0c;对每一次假设检验都计算其P值&#xff0c;然后将计算出的P值按照…

对接讯飞聊天机器人接口--复盘

1、准备工作 1&#xff09;、进入以下平台进行注册&#xff0c;登录后&#xff0c;点击红框处 2&#xff09;、点击个人免费包&#xff08;会弹出实名认证&#xff0c;先进行实名认证&#xff09; 3&#xff09;、认证后&#xff0c;会进入以下界面&#xff0c;先添加应用 4&am…

代码随想录刷题题Day29

刷题的第二十九天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C Day29 任务 ● 01背包问题&#xff0c;你该了解这些&#xff01; ● 01背包问题&#xff0c;你该了解这些&#xff01; 滚动数组 …

vue 项目实现下拉加载

场景&#xff1a;vue 网站手机端适配&#xff0c;需要实现拉到底部加载下一页的效果。 方法一&#xff1a;浏览器监听函数 浏览器加载到底部监听 1&#xff09;data相关参数 // 展示的数据tableData: [],// 总数据量 默认为 0pageTotal: 0,// 当前页 默认是第一页currentPag…

软件测试|深入理解Python的encode()和decode()方法

简介 在Python中&#xff0c;字符串是不可变的序列对象&#xff0c;它由Unicode字符组成。当我们需要在字符串和字节之间进行转换时&#xff0c;Python提供了两个非常重要的方法&#xff1a;encode()和decode()。这两个方法允许我们在Unicode字符和字节之间进行相互转换&#…

C++ 多线程顺序打印

打印要求&#xff1a; 三个打印线程顺序进行。 线程要求如下&#xff1a; 线程A&#xff1a;打印A 线程B&#xff1a;打印B 线程C&#xff1a;打印C 打印结果&#xff1a; A B C A B C A B C A B C A B C 法一&#xff1a;需要锁和共享变量 #include <iostream>…

认知能力测验,⑤破解图形推理测试题,校招社招网申在线测评必用

认知能力测试&#xff0c;如今是每个求职者必须要面对的&#xff0c;有的人可以顺顺利利通过&#xff0c;而有的人只能够遗憾止步。想要通过认知能力测验&#xff0c;并不是一件易事&#xff0c;而今天要说的图形推理&#xff0c;仅仅是其中的一个部分&#xff0c;抛砖引玉&…

【数据分析实战】冰雪大世界携程景区评价信息情感分析采集词云

文章目录 引言数据采集数据集展示数据预处理 数据分析评价总体情况分析本人浅薄分析 各游客人群占比分析本人浅薄分析 各评分雷达图本人浅薄分析 差评词云-可视化本人浅薄分析 好评词云-可视化本人浅薄分析 综合分析写在最后 今年冬天&#xff0c;哈尔滨冰雪旅游"杀疯了&q…

IP地址的网络安全防护和预防

网络安全对于保护个人和组织的信息资产至关重要&#xff0c;而IP地址是网络通信的基础。在这篇文章中&#xff0c;IP数据云将探讨IP地址的网络安全防护和预防措施&#xff0c;以确保网络的安全性和可靠性。 IP地址是互联网上每个设备在网络中的唯一标识符。有IPv4和IPv6两种类…

docker部署awvs

docker部署awvs cantos部署docker点这里 下载镜像 docker pull xiaomimi8/awvs14-log4j-2022 docker images 查看本地所有镜像启动镜像 docker run -it -d&#xff08;后台运行&#xff09; -p&#xff08;端口映射&#xff09; 13443&#xff08;主机端口&#xff09;:3443&…