I disagree that using the intrusive CRTP discourages refcounting. If anything, it makes refcounting contagious, because if any one instantiator of the class wants to make a refcounted instance, it forces all instantiators to construct a refcounted instance. This means, for example, you have to use MakeRefCounted in unittests where it's clear that the object outlives things that reference it. If you have multiple places in production code that instantiate the class, it's hard to tell which ones need to be refcounted and which ones are refcounted only because base::RefCounted forces it to be stored in a scoped_refptr.