[webkit-dev] deleteOwnedPtr(T* ptr)

Finnur Thorarinsson finnur at chromium.org
Thu Nov 11 00:24:21 PST 2010


Umm... shouldn't this behavior be commented so that people are not left
wondering why it fails and trying to "fix" it?

On Wed, Nov 10, 2010 at 16:04, Darin Adler <darin at apple.com> wrote:

> On Nov 10, 2010, at 2:33 PM, Daebarkee Jung wrote:
>
> > I found that the following lines made errors:
> > // OwnPtrCommon.h
> > template <typename T> inline void deleteOwnedPtr(T* ptr)
> > {
> >         typedef char known[sizeof(T) ? 1 : -1];
> >         if (sizeof(known))
> >           delete ptr;
> > }
> >
> > I am very curious about why the author wrote like the above.
> > What could be the author's intention?
>
> The code is to prevent issues like the ones described on these websites:
>
> http://stackoverflow.com/questions/1767679/incomplete-type-memory-leaks
>
> http://bytes.com/topic/c/answers/611877-gcc-class-forward-declarations-destructor-calls
>
> http://connect.microsoft.com/VisualStudio/feedback/details/231177/delete-of-pointer-to-incomplete-class
>
> If we delete a pointer and the object has incomplete type, we get undefined
> behavior. Instead this code causes compilation to fail if the object has
> incomplete type. The use of a negative number for the size of an array is a
> way to guarantee we get a compilation error.
>
> Your alternate version might also work; I’m not sure.
>
>    -- Darin
>
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20101111/964262a7/attachment.html>


More information about the webkit-dev mailing list