On Tuesday, August 12, 2014 11:22:05 AM UTC-4, Aryeh Gregor wrote:
> For refcounted types, isn't a raw pointer in a local variable a red
> flag to reviewers to begin with? If GetT() returns a raw pointer
> today, like nsINode::GetFirstChild() or something, storing the result
> in a raw pointer is a potential use-after-free, and that definitely
> has happened already. Reviewers need to make sure that refcounted
> types aren't ever kept in raw pointers in local variables, unless
> perhaps it's very clear from the code that nothing can possibly call
> Release() (although it still makes me nervous).
Putting the burden on reviewers when something can be automatically checked
doesn't seem like a good idea -- it requires reviewers to know that GetT()
*does* return a refcounted type, for example. As dbaron pointed out, there are
cases where we do actually return and keep things around as bare pointers.
It's unfortunate that we can't create a nsCOMPtr<> that will disallow
assignment to a bare pointer without an explicit .get(), but will still allow
conversion to a bare pointer for arg passing purposes. (Or can we? I admit my
C++-fu is not that strong in this area...) It would definitely be nice to get
rid of already_AddRefed<> (not least because the spelling of "Refed" always
grates when I see it :).
- Vlad
_______________________________________________
dev-platform mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-platform