checked_delete是对c++delete关键字的加强,可以在编译期间保证delete或delete[]删除的是一个指向“完整类型”的指针。如:
-
class demo;
-
-
void do_delete(demo *p){
-
delete p;
-
}
-
class demo{...};
-
-
int main(){
-
auto p = new demo();
-
do_delete(p);
-
-
}
如果这样写就只会有warning,如果写成下面这样,就会报错:
-
class demo;
-
-
void do_delete(demo *p){
-
checked_delete(p);
-
}
-
class demo{...};
-
-
int main(){
-
auto p = new demo();
-
do_delete(p);// 编译出错
-
-
}
其实现原理比较简单,
-
template<class T> inline void checked_delete(T *x){
-
typedef char type_must_be_complete[sizeof(T)?1:-1];// 如果是非完整,sizeof返回0,数组大小为-1,报错
-
(void) sizeof(type_must_be_complete);
-
delete x;
-
}
其实智能指针都在内部调用了checked_delete,可以自动管理指针的生命周期,而且是异常安全的
阅读(1581) | 评论(0) | 转发(0) |