C++基础面试题, C++ 中类定义中 delete 关键字和 default 关键字的作用?
C++基础面试题, C++ 中类定义中 delete 关键字和 default 关键字的作用?
QA
Step 1
Q:: C++
中类定义中 delete 关键字的作用?
A:: 在 C++
中,delete
关键字用于显式地删除默认的类成员函数或构造函数。通常用于阻止类对象被复制或移动。比如,将复制构造函数或赋值运算符标记为 delete
,可以防止对象被复制或赋值,从而避免意外的深拷贝操作。
示例:
class MyClass {
public:
MyClass(const MyClass&) = delete; // 禁止复制构造函数
MyClass& operator=(const MyClass&) = delete; // 禁止赋值运算符
};
在上述例子中,试图复制 MyClass
的对象会导致编译错误。
Step 2
Q:: C++
中类定义中 default 关键字的作用?
A:: 在 C++
中,default
关键字用于显式地请求编译器生成默认的类成员函数或构造函数。这种情况下,尽管编译器通常会自动生成默认构造函数、复制构造函数、析构函数等,但在某些情况下,需要显式地指定 default
来恢复这些默认行为。例如,在用户定义了某些构造函数的情况下,编译器将不会自动生成默认构造函数,此时可以使用 default
来显式要求生成。
示例:
class MyClass {
public:
MyClass() = default; // 明确要求生成默认构造函数
MyClass(const MyClass&) = default; // 明确要求生成默认复制构造函数
};
在上述例子中,即使用户定义了其他构造函数,MyClass
仍然拥有默认构造函数。
用途
这些关键字在 C`++` 的类设计中非常重要,尤其是在涉及对象生命周期管理、资源管理以及避免不必要的对象复制和移动时。在实际生产环境中,`delete` 关键字可以用来避免对象被意外复制或移动,防止潜在的性能问题或逻辑错误。而 `default` 关键字可以确保类的默认行为得以保留,尤其是在用户定义了其他构造函数的情况下,可以显式要求编译器生成所需的默认函数。\n相关问题
🦆
C++ 中构造函数和析构函数的区别是什么?▷
🦆
什么是C++中的拷贝构造函数和赋值运算符?▷
🦆
在C++中,何时需要定义拷贝构造函数和赋值运算符?▷
🦆
C++11 中的移动语义是什么?如何使用?▷
🦆
RAII资源获取即初始化是什么?在C++中如何实现?▷