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

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

相关推荐
青少儿编程课堂2 分钟前
2026蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:堆排序与优先队列解析
c++·python·算法·bfs·信息学竞赛
Eiceblue3 分钟前
用 Python 给 Word 文档加水印:文字、图片与批量处理
开发语言·vscode·python·word
j7~8 分钟前
【C++ 面试笔记】(篇二):类与数据抽象 & STL 容器与算法
开发语言·c++·面试·stl容器和算法·类和数据抽象
Fuyo_111926 分钟前
深入解析 C++ unordered_set 与 unordered_map 的核心特性与性能实战
开发语言·c++
码匠许师傅30 分钟前
【C++三方组件】FFmpeg:音视频处理的瑞士军刀
c++·ffmpeg·音视频
ShineWinsu1 小时前
对于Qt:QPushButton常见属性的解析
开发语言·c++·qt·api·gui·按钮·qpushbutton
外贸GEO优化1 小时前
外贸独立站的可抓取性:JS 渲染、懒加载与无限滚动到底影响什么
开发语言·javascript·ecmascript
飞浪纪元[FWC–FE]1 小时前
Qt 工程创建与 CMake / qmake 构建规范
开发语言·数据库·qt
Lhan.zzZ1 小时前
用 Qt 构建线程安全的通讯静态库:从线程亲和性到完整工程
c++·vscode·qt·tcp/ip·udp