Status, Recent Changes, and Plans

I'm sorry this section is in the way for first-time readers. You may want to skip directly to the Getting Started Guide, the Reference Manual, or the FAQ. I put this section at the top so that checking for recent changes will be easy.

Recent changes to nsCOMPtr

Most recent first

  • Made == and != between an nsCOMPtr and a raw pointer (or a literal 0 or nsnull) work correctly on all compilers. See bug 65664.
  • Made getter_AddRefs( nsCOMPtr& ) apply the same type-safety check that the simple assignment forms do.
  • Added do_CreateInstance.
  • Added do_GetService.
  • Eliminated the need to cast getter_AddRefs when an nsISupports** is needed.
  • Relaxed the invariant for nsCOMPtr<nsISupports>, so that it is now a pointer to any XPCOM interface.
  • Added do_QueryReferent to make using nsIWeakReferences easier.

Plans for nsCOMPtr

  • bug 59212: as soon as we test on more compilers, start recommending already_AddRefed as a function result.
  • bug 59414: making operator& private may help prevent some leaks caused by casting
  • Move the factored nsCOMPtr routines into their own library, to reduce nsCOMPtr clients' dependency on the XPCOM library.

Recent changes to this document

  • Removed the statement that == and != between an nsCOMPtr and a raw pointer or literal 0 does not work on some compilers since it is no longer true.
  • Added an entire section to the Getting Started Guide on nsCOMPtrs in function signatures
  • Added references to recent bugs influencing the use of nsCOMPtr machinery: bug 59212, and bug 59414
  • Fixed comparisons 1 and 3, as per comments by Morten Welinder
  • Updated examples to prefer direct initialization over copy initialization.