C++11关键字delete
2018-09-06 本文已影响0人
cx7
delete
delete的原用法是用于释放new申请的内存
int *cacheMem = new int;
delete cacheMem;
int *cacheMem = new int[10];
delete[] cacheMem;
C++11标准对delete做了扩展 可以用于指示编译器删除不需要的函数生成
意味着可以做到:
1. 删除某种类成员函数
2. 删除某种模版类型函数
删除指定的函数
可以删除类的某个成员函数 比如默认生成的构造函数
类默认生成的无参构造函数经常造成这个问题
class test {
public:
test() {}
};
test ctx(); //返回类型为test的无参函数ctx
ctx并非是test类型的对象 反而是一个函数
屏蔽掉无参数函数或者改用{}来声明都可以解决这个问题
test ctx; //ctx是test类型的对象
test ctx{}; //ctx是test类型的对象
或者修改
class test {
public:
test() {} = delete;
};
test ctx(); //ctx是test类型的对象
删除某种类型的模版函数
template <typename T>
void printVal(T &t);
void printVal(Char t) = delete; //被删除 当别处调用传入char类型参数时 编译器会报错