Howdy folks, Thanks to the magic of C++11, we don’t need PassRef and PassRefPtr anymore, as we can use rvalue references and move semantics to achieve churn-free ownership transfers.
I’ve already removed PassRef entirely, and PassRefPtr will be next. Given how widely it’s used in the codebase, I expect it will take some time. Here’s the endgame I’m shooting for: Ref<T> is used for all ownership-sharing pointers known to be non-null. It cannot be null. RefPtr<T> is used for pointers that need a null state. Return values that were previously PassRef<T> or PassRefPtr<T> will become Ref<T> or RefPtr<T>. Arguments that were previously PassRef<T> or PassRefPtr<T> will become Ref<T>&& or RefPtr<T>&&. You will need to WTF::move() when transferring ownership. This is different from the PassRefPtr way, where ownership could be transferred without visual indication at the call site. To pass a local RefPtr to a function f(RefPtr&&) *without* transferring ownership, use Ref/RefPtr::copyRef() to keep the local reference on the object. Important note: After you’ve WTF::move()’d out of a Ref, it’s in an invalid state and cannot be used again. I’m working on a solution to turn this into a compile-time error. Cheers, Kling PS. Once the kinks are ironed out, I’ll also be updating the RefPtr documentation on webkit.org. _______________________________________________ webkit-dev mailing list [email protected] https://lists.webkit.org/mailman/listinfo/webkit-dev

