C/C++

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类型参数时 编译器会报错
上一篇下一篇

猜你喜欢

热点阅读