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

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

相关推荐
独自破碎E1 分钟前
【双指针】反转字符串
java·开发语言
信也科技布道师5 分钟前
基石Redis实例自动化调度之路
java·开发语言·redis·自动化
666HZ66620 分钟前
程序设计竞赛java
java·开发语言
开发者小天21 分钟前
python查询天气小示例
开发语言·python
知行合一。。。22 分钟前
Python--04--数据容器(元组)
开发语言·python
wasp52026 分钟前
Hudi 客户端实现分析
java·开发语言·人工智能·hudi
秦苒&28 分钟前
【脉脉】AI 创作者 xAMA 知无不言:在浪潮里,做会发光的造浪者
大数据·c语言·数据库·c++·人工智能·ai·操作系统
啊阿狸不会拉杆30 分钟前
《计算机操作系统》 第十一章 -多媒体操作系统
开发语言·c++·人工智能·os·计算机操作系统
独自破碎E30 分钟前
【滑动窗口】最长无重复子数组
java·开发语言