C++面试题更新 2026-08-03

在 C++ 中,当在类的定义中使用 delete 和 default 关键字时,它们分别有哪些作用?请解释其目的和使用场景。

考察说明

考查对 C++11 及以后版本中 special member function 控制机制的理解。

回答思路

  1. 【回答框架 1】default 关键字用于显式要求编译器生成特殊成员函数的默认实现,例如默认构造函数、析构函数、拷贝构造函数、拷贝赋值运算符、移动构造函数和移动赋值运算符。当需要保留默认行为但又有其他需要声明的情况(比如声明了其他构造函数导致默认构造不再自动生成),可以用 default 显式请求默认版本,避免重复手写。
  2. 【回答框架 2】delete 关键字用于删除特殊成员函数或普通函数的重载版本,表示该函数不可调用。如果调用,编译器会报错。常见用途包括:禁止拷贝构造和拷贝赋值,使类不可拷贝;禁用某些参数类型的隐式转换或重载歧义。
  3. 【回答框架 3】default 和 delete 可以配合使用,例如声明一个拷贝构造函数为 default 但将拷贝赋值运算符设为 delete,实现“可拷贝构造但不可赋值”的语义。
  4. 【回答框架 4】使用 delete 可以显式禁用不必要的隐式转换,例如将接受 double 参数的构造函数标记为 delete,避免类型安全问题。
  5. 【关键点 1】default 显式请求编译器生成特殊成员函数的默认实现,保证行为与合成的版本一致。
  6. 【关键点 2】delete 标记函数不可用,调用会产生编译错误,常用于禁拷、禁用转换。
  7. 【关键点 3】default 和 delete 可以组合使用,精细控制类对象的操作集合。
  8. 【关键点 4】它们是 C++11 引入的特性,用于控制特殊成员函数的生成和可调用性。
  9. 【易错点 1】将析构函数声明为 delete 会导致对象无法销毁,通常应避免。
  10. 【易错点 2】default 不能用于非特殊成员函数,delete 可用于任何函数。