[C++] delete关键字的妙用

优先使用delete函数,而不是private未定义函数
任何函数都可以删除,包括非成员函数和模板具现

delete 的使用

  • 一般使用type Function(args) = delete表示函数为删除函数,不可调用。用于显示告诉用户这个函数不能使用或者这类函数不可使用;

对比private 成员函数的作用,delete有更多优势

  • private一个成员函数的本意就是不让人用或者是显性表示删除给函数;所以直接用delete即可。
  • 在类中使用delete函数时,要注意放到public session中;
  • delete的函数能提早爆出错误;而private的函数只有在链接阶段才暴露出来。
  • 以下代码中说明了delete的一些好处
//1) delete 可以标志类外部的函数
bool isLucky(int);
bool isLucky(char) = delete; // 表示当输入char时,非法;
bool isLucky(double) = delete; // 表示当输入double/float时,非法; 因为当float类别面临转型为int或double时,会优先于转double。
template <typename T>
void processPointer(T* ptr);
// 2) 对于模板中 显性消除对一些类别的支持。而类中模板成员函数,则无法使用private的方式进行消除,因为不能特例化public权限函数时将其权限改为private。
template <typename T>
void processPointer(T* ptr);
template <>
void processPointer(void* ptr) = delete; // 显性消除对void的支持。【可以考虑加入自己工程中】
template <>
void processPointer(char* ptr) = delete;// char*指针一般是指C风格的字符串,而不是涉及到单个字符指针;
// 3) 对于类中模板函数,delete可以在外部声明
class Widget {
public:
 template <typename T>
 void processPointer(T* ptr);
};
template <>
void Widget::processPointer<void>(void*) = delete;

Reference

  • Effective Modern C++: 条款11: 优先选用删除函数,而非private未定义函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值