[Effective C++]条款06:若不想使用编译器自动生成的函数,就该明确拒绝

EtherCAT主站SOEM -- 24 -- 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站 以上就是EtherCAT主站SOEM – 23 – 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。 阅读详情

在C++中,根据之前文章中提到的条款05,创建一个空的class类,编译器会默认生成一些特殊成员函数(如构造函数,析构函数,拷贝构造函数、拷贝赋值运算符等),如果不想让编译器自动生成這些函数,可以通过以下方式实现:
1、引入 = delete
C++ 11引入了= delete,可以显式删除函数,明确告诉编译器不要生成delete修饰的函数了。

class MyClass{
public:
    MyClass = default; // 允许默认构造函数
    
    // 明确表示,删除拷贝函数和拷贝赋值预算法
    MyClass(const MyClass&) = delete;
    MyClass& operate=(const MyClass&) = delete;
}

2、将函数声明为private
C++11 之前,可以通过将函数声明为private,并不提供实现,用来阻止外部调用。private修饰的函数,外部不能调用。

class MyClass{
public:
    MyClass = default; // 允许默认构造函数
    
private:
    // 声明,但不实现
    MyClass(const MyClass&);
    MyClass& operate=(const MyClass&);
}

3、继承不可拷贝的基类
定义一个不可拷贝的基类,并让目标类继承它。因为基类显式说明没有拷贝函数和拷贝赋值操作符的函数调用功能,其派生子类也具有该特性。

class NonCopyable {
protected:
    NonCopyable() = default;
    ~NonCopyable() = default;

    // 删除拷贝构造函数和拷贝赋值运算符
    NonCopyable(const NonCopyable&) = delete;
    NonCopyable& operator=(const NonCopyable&) = delete;
};

class MyClass : private NonCopyable {
    // MyClass 现在不可拷贝
};

思维导图笔记
在这里插入图片描述

从0入门LocoTrack:6倍加速的SLAM追踪新范式实战指南 传统点追踪方法(如CorrTracker、TAPIR)在处理大规模场景或实时任务时,要么精度不足,要么速度太慢。而LocoTrack通过“局部4D相关性”和“Transformer全局关联”的创新设计,实现了精度与速度的双重突破速度:比现有SOTA方法快6倍,吞吐量高达数万点/秒;精度:在Kinetics、DAVIS等数据集上,定位误差显著低于传统方法;鲁棒性:能应对低纹理、动态场景等复杂环境,这是传统方法的“噩梦场景”。 阅读详情

相关推荐

一文详细讲解CRM系统(附架构图、流程、功能介绍)

专为中小企业量身打造高性价比的数字化转型路径!企业如何用CRM才能真正做到降本增效?今天,就用一文讲清这些问题!读完本文,你将清楚得了解CRM的概念、框架、流程、功能、企业成功案例,文末还有常见问题解答。

Dabeishandong的博客 9925

Effective C++之条款06:若不想使用编译器自动生成的函数,就该明确拒绝

声明: 文中内容收集整理自《Effective C++(中文版)第三版》,版权归原书所有。 本内容在作者现有能力的基础上有所删减,另加入部分作者自己的理解,有纰漏之处敬请指正。 Effective C++之条款06:若不想使用编译器自动生成的函数,就该明确拒绝 Explicitly disallow the use of compiler-generated functions you do...

HakunaMatata的博客 327

tcmalloc(高并发内存池)简化版讲解-项目

高清发不上去,私我发高清,项目完整代码@我。

2201_75352618的博客 910

Effective C++条款06:若不想使用编译器自动生成的函数,就该明确拒绝

一、前言 有些情况下,我们不希望使用class生成默认的构造函数、析构函数、拷贝构造函数、拷贝赋值运算符。例如:我们不希望使用class的拷贝赋值运算符(那么就不能将一个对象赋值给另一个对象),那么就需要使用一些手段来禁止使用这些功能 文本介绍一些方法来禁止编译器为我们提供的这些默认函数 二、方式1 如果我们不想使用某些函数,将这些不想使用的函数在类中声明为private,那么就不能使用这些函数了 注意事项: 如果声明为private的话,那么就只需要声明就行了,不需要定义,因为我们程序是不会使用

www_dong的博客 287

基于E310的纯逻辑代码实现AD9361射频收发

基于微相科技的E310平台实现AD9361的射频收发功能。采用纯逻辑控制的方式,不需要PS参与。实现了用VIO控制收发使能,发射功率,收发频率,数据接口时序控制,接收增益,BIST测试等功能。

xiaomingzi55的博客 2331

自动驾驶传感器选型实战:摄像头、激光雷达与毫米波雷达融合策略

自动驾驶感知系统的核心在于多传感器协同,而非单一技术优劣。摄像头擅长语义识别但受光照和天气制约;激光雷达提供高精度测距却面临成本、温漂与多径干扰等物理瓶颈;毫米波雷达则以全天候鲁棒性与精准测速成为安全底线的守门人。三者融合不是简单叠加,而是基于场景约束(如暴雨、强光、高速跟车)、成本边界(BOM控制)与时间窗口(量产节奏)的工程权衡。真实量产方案中,‘纯视觉’实为视觉主责+毫米波兜底,‘激光雷达上车’本质是用硬件真值加速算法迭代,而传统车企更倾向以毫米波为仲裁者协调冲突。理解这些底层原理,才能在传感器选型、

weixin_32495691的博客 276

Effective C++ 条款 06:若不想使用编译器自动生成的函数,就该明确拒绝

在 C++ 中,如果你不想让编译器为你的类自动生成某些特殊函数(如拷贝构造函数、拷贝赋值操作符等),你可以通过将这些函数声明为。)以确保派生类可以使用,但其拷贝构造函数和赋值操作符是私有的(,因此它的拷贝构造函数和拷贝赋值操作符都被禁用,无法对。并不提供实现,从而显式拒绝编译器的默认行为。基类,它的构造函数和析构函数可以被保护(),并且没有实现,从而阻止对象被拷贝。一种常见的做法是创建一个。对象进行拷贝或赋值操作。类的对象被拷贝或赋值。

weixin_42255569的博客 298

AutoSAR_BSW高阶 7. Signal Group 信号组

Autosar BSW的高级配置是实现复杂汽车电子系统的关键步骤之一。通过合理配置信号组和使用适当的参数,您可以提高系统性能,确保数据的可靠传输。在本博客中,我们深入探讨了信号组的概念和高级配置参数,并提供了示例代码,希望这些信息能够帮助您更好地理解和应用Autosar BSW的高级配置。如果您在配置过程中遇到任何问题,不妨寻求专业支持,以确保您的汽车电子系统能够顺利运行。Autosar COM 模块是一个广泛应用于汽车行业的关键技术,它使不同的电子控制单元能够有效地通信和协作。

一直在水些技术小文 662

Effective C++ 条款06:若不想使用编译器自动生成的函数,就应该明确拒绝

深入解析 Effective C++ 条款06:通过将不想使用的成员函数声明为 private 并不予实现,或现代 C++ 中使用 =delete,来明确拒绝编译器自动生成的函数。

凡人叶枫的博客 189

仿真学习系列(四十一):Sigrity仿真之PDN阻抗提取

电源分配网络(Power Distribution Network,简称PDN)是电子系统中至关重要的部分,主要用于将电源从电源输入端传输到各个组件。PDN的设计质量直接影响到系统的电源完整性和信号稳定性,尤其是在高速设计中,PDN的阻抗特性对电源噪声、地弹(ground bounce)和电源完整性(Power Integrity,简称PI)具有重要影响。

案例文章,高速信号 1133

地下管网巡检机器人:基于YOLOv8与UI界面的智能化系统设计与实现

通过YOLOv8模型的目标检测功能结合实时视频流,我们能够实现对地下管网巡检机器人的智能化控制。系统通过图像识别技术帮助巡检人员快速识别管道中的各种缺陷和障碍物,从而提高巡检效率和准确性。未来,我们可以继续优化模型,增加更多的目标类别,并通过强化学习等方法提高机器人的自主巡检能力。此外,随着硬件技术的发展,未来的巡检机器人可能会具备更强的感知能力和更高的智能水平。

YOLO 529

Effective C++ 条款06: 若不想使用编译器自动生成的函数,就该明确拒绝

Effective_C++_06

君鼎的博客 382

OpenCV-Python实战(11)——OpenCV轮廓检测相关应用

在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。在本文中,我们将学习如何利用获取到的轮廓,进行形状分析以及对象检测和识别。

盼小辉丶的博客 1万+

Effective C++ 条款06 若不想使用编译器自动生成的函数就明确拒绝

如果不声明copy ctor和copy assignment,编译器会自动声明,并且都是public的。如何阻止copying呢? 1. 将成员函数声明为private而且故意不去实现它 c++标准库的iostream程序中就是这样做的。ios_base, basic_ios和sentry类无一例外。我查看了安装Dev c++时候安装的编译器gnu c++的源代码,如下: 这样,如果拷贝该类对象,编译器会阻止;如果不慎在member函数或friend函数调用,链接器会抱怨。 另外,我们知道,把连接期错误移

Xuan_Ray的博客 246

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Effective C++条款06:构造/析构/赋值运算之(若不想使用编译器自动生成的函数,就该明确拒绝)

一、前言 在前面一篇文章中(https://blog.youkuaiyun.com/qq_41453285/article/details/104165762),我们介绍了C++编译器会为我们的class生成默认的构造函数、析构函数、拷贝构造函数、拷贝赋值运算符 但是有些情况下,我们不希望使用其中的一种功能。例如:我们不希望使用class的拷贝赋值运算符(那么就不能将一个对象赋值给另一个对象),那么就需要...

董哥的黑板报 923

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Effective C++ 条款06 若不想使用编译器自动生成的函数,就该明确拒绝

请记住: 编译器可暗自为类创建默认构造函数、析构函数

u013654533的专栏 745

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Effective C++ 阅读心得-条款06:若不想使用编译器自动生成的函数,就该明确拒绝

本文讲解了禁用默认函数的一些方法,并用单例和智能指针举例,很适合当面经看哦~

weixin_42208702的博客 217

Effective C++条款06解读 : 若不想使用编译器自动生成的函数, 就应该明确拒绝

我们知道, C++编译器经常在背地里捣鬼, 定义一些默认的函数。 那如果不想用编译器生成的这些默认函数, 该怎么办呢? 很简单: 我们自己去明确声明, 不让编译器来骚扰。 比如, 如果我们要阻止类的使用进行对象拷贝和复制, 可采用如下的方式: #include using namespace std; class A { public: // ... A() {

认知 行动 坚持 7177

读书笔记《Effective C++》条款06:若不想使用编译器自动生成的函数,就该明确拒绝

所有编译器产出的函数都是public。如果不想让编译器自动生成这些函数,得自行声明它们,可以将copy构造函数或copy assignment操作符声明为private,这样就阻止了编译器暗自创建的版本,而且令这些函数为private,得以成功阻止人们调用它们。 一般而言这个做法并不绝对安全,因为member函数和friend函数还是可以调用private函数。有种办法:只声明这些private

Do-Program的专栏 483

Effective C++读书笔记之条款06:若不想使用编译器自动生成的函数,就该明确拒绝。

条款6:若不想使用编译器自动生成的函数,就该明确拒绝。 1、书中采用房子对象来举例,一套房子是一个独一无二的资源,不存在一模一样的两栋房子,因此是不支持拷贝操作。 class HomeForSale { …… }; HomeForSale h1; HomeForSale h2; HomeForSale h3(h1);//默认copy构造 出错 h1=h2;//默认copy assignment 出...

Struggling_Jeff的博客 237

《Effective C++》学习笔记条款06 若不想使用编译器自动生成的函数,就该明确拒绝

若不想使用编译器自动生成的函数,就该明确拒绝!

UE引擎开发工程师 1212

Effective C++ 学习笔记——条款06:若不想使用编译器自动生成的函数,就改名却拒绝

Effective C++ 学习笔记——条款06:若不想使用编译器自动生成的函数,就改名却拒绝

weixin_42047439的博客 906

Effective c++条款06:若不想使用编译器自动生成的函数,就该明确拒绝

正常情况下一个类都拥有自己的拷贝构造函数和赋值函数: MyClass a; MyClass b; MyClass c(a);//拷贝 a = b;//拷贝 但如果我们希望我们这个类应该是特有的,不允许有副本,那就不应该支持拷贝功能,如果是普通的函数,只要不声明就是了,但这个策略对copy构造函数和赋值操作符却不起作用,因为如果我们不去声明它们,而又去尝试调用它们,编译器就会自动去声明它们。 答案的关键是,你可以将copy构造函数和赋值操作符声明为private,藉由明确声明一个成员函数,你阻止了编译器暗自

qq_26611129的博客 218

Effective C++条款06:若不想使用编译器自动生成的函数,就该明确拒绝(Explicitly disallow the use of compiler-generated functions

Effective C++条款06:若不想使用编译器自动生成的函数,就该明确拒绝(Explicitly disallow the use of compiler-generated functions

CltCj的博客 364

effective C++读书笔记--【条款06:若不想使用编译器自动生成的函数,就该明确拒绝】

蓝图 这条其实基本上就是针对copy构造函数和copy assignment操作符这两个函数的,为什么这么说呢,其他的函数,不想用的话,不要声明不要定义就完了,但是copy构造函数和copy assignment操作符不声明不定义的话编译器会自动整一套public的出来,所以这让人比较为难,作者给出了两个方案: 声明为private,但是不予以定义; 使用Uncopyable base cl...

liangll的博客 219

[Effective C++]条款06 若不想使用编译器自动生成的函数,就该明确拒绝

为驳回编译器自动提供的机能,可将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的base class也是一种方法

Roger King的打怪练级房 665
上一篇: [Effective C++]条款05:了解C++默默编写并调用哪些函数
下一篇: [Effective C++]条款07:为多态基类声明virtual析构函数
Tim_10
博客等级 码龄2年 162粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值