c++ 在QScopedPointer实现中使用sizeof

icomxhvb  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(125)

为了理解Qt如何防止不完整类型,我查看了qscopedpointer.h的头文件。相关部分如下:

template <typename T>
struct QScopedPointerDeleter
{
    static inline void cleanup(T *pointer)
    {
        // Enforce a complete type.
        // If you get a compile error here, read the section on forward declared
        // classes in the QScopedPointer documentation.
        typedef char IsIncompleteType[ sizeof(T) ? 1 : -1 ];
        (void) sizeof(IsIncompleteType);

        delete pointer;
    }
};

我知道在不完整的类型上使用sizeof时编译会失败。但是数组和第二个sizeof做什么呢?仅仅sizeof还不够吗?

au9on6nz

au9on6nz1#

使用了一个数组,所以它的负大小将给予编译时错误。第二行通过确保使用IsIncompleteType的实际大小来确保编译器不能跳过sizeof(T)的计算。

相关问题