The default behavior is to rely on theNew/Deletepair of lifetime managers, because it's sensible to do so. However, because a significant portion of our abstractions follow the convention of exposing a create / destroy pair of factory functions (where create always returns a raw pointer), there also exists a dedicatedFactoryCreate/FactoryDestroypair of lifetime managers. To change the default behavior in order to utilize a specific lifetime manager pair, specialize theDefaultInstanceCreatorandDefaultInstanceDestroyertraits for the types that need different handling. Alternately, it's also possible to pass a custom creator / destroyer on each invocation.