在看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只有申明没有具体定义的话就会报错;
也可能存在内存泄露;