在看shared_ptr类看到了析构函数有这么一行代码 checked_delete( T * t )
具体函数如下:
template<class T> inline void checked_delete(T * x)
{
// intentionally complex - simplification causes regressions
typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
(void) sizeof(type_must_be_complete);
delete x;
}
template<class T> inline void checked_array_delete(T * x)
{
typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
(void) sizeof(type_must_be_complete);
delete [] x;
}
在搜了下,自己也测试一下 其实主要功能是检查不完整类型数据的 比如:
class B; /// 前置申明一个B类型;
template< typename T > class A {
public:
A()
{
enum{ type_must_be_complete = sizeof( B ) };
}
private:
int i ;
}
如果B只有申明没有具体定义的话就会报错;
也可能存在内存泄露;
本文深入探讨了在C++中析构函数中使用checked_delete和checked_array_delete函数的作用,特别是如何检查不完整类型的实例,避免内存泄漏和运行时错误。通过示例展示了在模板类中声明不完整类型时引发的错误情况,并说明了如何通过简单的代码实现进行预防。
150

被折叠的 条评论
为什么被折叠?



