我无法理解Webkit中的deleteOwnedPtr函数

时间:2012-06-05 13:14:07

标签: c++ webkit

在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];

1 个答案:

答案 0 :(得分:1)

在webkit-dev邮件列表中找到了解释。如果有人试图删除不完整的类型,则会引发编译器错误。

https://lists.webkit.org/pipermail/webkit-dev/2010-November/015051.html

  

如果我们删除指针并且对象的类型不完整,我们就得到了   未定义的行为。相反,此代码会导致编译失败   对象具有不完整的类型。使用负数为   数组的大小是一种保证我们得到编译错误的方法。