Hi all,

It has been a while since I last announced the plan to adopt smart pointers 
using clang static analyzer:

Here are some updates.

1. We’ve made a progress in implementing all the rules including rules for 
local variables in clang static analyzer:

2. We also have a new kind of smart pointers: CheckedRef 
<https://github.com/WebKit/WebKit/blob/main/Source/WTF/wtf/CheckedRef.h> / 
<https://github.com/WebKit/WebKit/blob/main/Source/WTF/wtf/CheckedPtr.h>. These 
behave like Ref and RefPtr in that they increment & decrement a counter in an 
object but unlike them don’t extend the lifetime of the object. Instead, the 
destructor of the base object release asserts that there are no live CheckedRef 
/ CheckedPtr left.

I added a new section in the guide describing when to use each smart pointer 

3. I wanted to describe what applying these smart pointer rules mean. A lot of 
code changes needed for this work involves creating Ref / RefPtr / CheckedRef / 
CheckedPtr in stack:

One subtle thing is that even when a member variable is already Ref / RefPtr / 
CheckedRef / CheckedPtr, we must create another one in stack as seen here:

This is because these member variables can be cleared during the course of 
invoking a non-trivial function; or put it another way, it’s not immediately 
obvious from the code inspection that the object pointed to stays alive over 
the course of a non-trivial function call.

- R. Niwa

webkit-dev mailing list

Reply via email to