本文主要是介绍checked_delete提升安全性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
boost提供了一个安全的用于delete模板函数,在文件checked_delete.hpp中:
template<class T> inline void checked_delete(T * x)
{// intentionally complex - simplification causes regressionstypedef char type_must_be_complete[ sizeof(T)? 1: -1 ];(void) sizeof(type_must_be_complete);delete x;
}
为什么? 因为对一个incomplete type的指针运行delete操作结果是未定义的。
什么时候会出现incomplete type的指针,举个例子:
class B;void Destroy(B* b) {delete b;
}
如果你不调用这Destroy函数的话,G++不会报错,但是会显示警告:
main.cpp:30:12: warning: possible problem detected in invocation of delete operator: [enabled by default]
main.cpp:29:6: warning: ‘b’ has incomplete type [enabled by default]
main.cpp:27:7: warning: forward declaration of ‘class B’ [enabled by default]
main.cpp:30:12: note: neither the destructor nor the c
这篇关于checked_delete提升安全性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!