c++ 11 =delete

=delete 则是C++11引入的一种新特性,用于删除特定的函数,包括构造函数、析构函数、拷贝构造函数、赋值运算符等。通过将函数声明为 =delete,可以显式地阻止该函数被调用,即使在类内部或者友元函数中也无法使用。

使用 =delete 的场景:

防止拷贝和赋值

cpp 复制代码
class NoCopy {
public:
    NoCopy() = default;
    NoCopy(const NoCopy&) = delete;             // 删除拷贝构造函数
    NoCopy& operator=(const NoCopy&) = delete;  // 删除赋值运算符
};

上面的例子中,通过删除拷贝构造函数和赋值运算符,可以防止该类的对象被复制或者赋值。

禁止特定参数类型的构造

cpp 复制代码
class NoInt {
public:
    NoInt() = default;
    NoInt(int) = delete;  // 删除接受 int 参数的构造函数
};

删除默认构造函数

cpp 复制代码
class NoDefault {
public:
    NoDefault() = delete;  // 删除默认构造函数
    NoDefault(int value) : data(value) {}
private:
    int data;
};

在某些类中,可能希望禁止默认构造函数的生成,而只允许带参数的构造函数。

相关推荐
广州灵眸科技有限公司6 小时前
瑞芯微(EASY EAI)RV1126B 音频输入
linux·开发语言·网络·音视频
XFF不秃头6 小时前
力扣刷题笔记-旋转图像
c++·笔记·算法·leetcode
吃喝不愁霸王餐APP开发者6 小时前
基于Spring Cloud Gateway实现对外卖API请求的统一鉴权与流量染色
java·开发语言
王老师青少年编程6 小时前
csp信奥赛C++标准模板库STL案例应用3
c++·算法·stl·csp·信奥赛·lower_bound·标准模版库
心疼你的一切7 小时前
三菱FX5U PLC与C#通信开发指南
开发语言·单片机·c#
Tim_107 小时前
【C++入门】04、C++浮点型
开发语言·c++
@淡 定7 小时前
Java内存模型(JMM)详解
java·开发语言
谈笑也风生7 小时前
经典算法题型之复数乘法(二)
开发语言·python·算法
hkNaruto7 小时前
【C++】记录一次C++程序编译缓慢原因分析——滥用stdafx.h公共头文件
开发语言·c++
先知后行。8 小时前
python的类
开发语言·python