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;
};

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

相关推荐
ji198594434 分钟前
MATLAB 求散点曲线斜率
开发语言·算法·matlab
kaikaile19959 分钟前
MATLAB 实现:Koch & Zhao 图像水印算法(DCT域)
开发语言·算法·matlab
love_muming11 分钟前
链表每日一练
java·开发语言·数据结构·链表·idea·每日一练
QiLinkOS12 分钟前
QiLink开源生态的三维重构:基于时间、空间与社会价值的底层规则创新白皮书
大数据·c++·人工智能·科技·算法·gitee·开源
weixin_4462608513 分钟前
LLM智能体在社交模拟中的决策行为分析:有限状态与LLM-based策略对比研究
开发语言·php
牛肉在哪里18 分钟前
ros2 从零开始28 监听广播C++
开发语言·c++·算法·机器人
玖玥拾20 分钟前
C/C++ 数据结构(二)双向链表
c语言·数据结构·c++
techdashen30 分钟前
Cargo 1.94 开发周期全解析
开发语言·后端·rust
枕星而眠33 分钟前
Linux守护进程完全指南:从原理到实战
linux·运维·服务器·c++·后端
QiLinkOS37 分钟前
极客精神与商业思维的融合实践(2)
c语言·c++·人工智能·算法·开源协议