2

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

1 に答える 1

1

webkit-devメーリングリストで説明を見つけました。誰かが不完全な型を削除しようとすると、コンパイラ エラーが発生します。

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

ポインターを削除し、オブジェクトの型が不完全な場合、未定義の動作が発生します。代わりに、オブジェクトの型が不完全な場合、このコードはコンパイルを失敗させます。配列のサイズに負の数を使用すると、コンパイル エラーが確実に発生します。

于 2012-06-05T14:28:30.983 に答える