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];
webkit-devメーリングリストで説明を見つけました。誰かが不完全な型を削除しようとすると、コンパイラ エラーが発生します。
https://lists.webkit.org/pipermail/webkit-dev/2010-November/015051.html
ポインターを削除し、オブジェクトの型が不完全な場合、未定義の動作が発生します。代わりに、オブジェクトの型が不完全な場合、このコードはコンパイルを失敗させます。配列のサイズに負の数を使用すると、コンパイル エラーが確実に発生します。