C++11中=default用于显式要求编译器生成特殊成员函数,=delete用于禁用特定函数;常用场景包括显式生成默认构造函数或控制函数访问权限。

C++11引入了=default和=delete关键字,用来显式控制类的特殊成员函数(如构造函数、析构函数、赋值操作符等)的生成。这两个特性让程序员能更精确地管理对象的创建和复制行为。
当编译器没有自动生成某个特殊成员函数时,或者你想在public或private中显式要求生成,可以使用
=default
=default
class MyClass {
public:
MyClass() = default; // 默认构造函数
MyClass(int x) : value(x) {} // 自定义构造函数
MyClass(const MyClass&) = default; // 允许拷贝构造
MyClass& operator=(const MyClass&) = default; // 允许拷贝赋值
~MyClass() = default; // 默认析构
private:
int value = 0;
};
=delete
=delete
class NonCopyable {
public:
NonCopyable() = default;
// 删除拷贝构造和拷贝赋值
NonCopyable(const NonCopyable&) = delete;
NonCopyable& operator=(const NonCopyable&) = delete;
// 可以仍允许移动
NonCopyable(NonCopyable&&) = default;
NonCopyable& operator=(NonCopyable&&) = default;
};
结合=default和=delete,可以精准设计类的行为。
立即学习“C++免费学习笔记(深入)”;
class Number {
public:
Number(int x) : val(x) {}
// 禁止double转Number的隐式构造
Number(double) = delete;
private:
int val;
};
Number a(5); // OK
// Number b(3.14); // 编译错误:使用了deleted函数
基本上就这些。合理使用=default和=delete,能让类的接口更清晰、更安全。特别是编写库代码时,明确告知用户哪些操作被支持或禁止,有助于减少误用。
以上就是C++11如何在类中使用默认函数和删除函数的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号