在Webkit中找到此功能
template<typename T> inline void deleteOwnedPtr(T* ptr)
{
typedef char known[sizeof(T) ? 1 : -1];
if(sizeof(known))
delete ptr;
}
他们为什么不使用
if (sizeof(T))
delete ptr;
是什么意思
char known[-1];
答案 0 :(得分:1)
在webkit-dev邮件列表中找到了解释。如果有人试图删除不完整的类型,则会引发编译器错误。
https://lists.webkit.org/pipermail/webkit-dev/2010-November/015051.html
如果我们删除指针并且对象的类型不完整,我们就得到了 未定义的行为。相反,此代码会导致编译失败 对象具有不完整的类型。使用负数为 数组的大小是一种保证我们得到编译错误的方法。