文章目录
- delete 的使用
- 对比private 成员函数的作用,delete有更多优势
- Reference
优先使用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未定义函数