I assumed that we don't inherit from APM. If we do, the virtual is OK.

RuntimeRegistryObserver destructor doesn't really need to be virtual either, it is protected, so this interface is not expected to be used for destroying objects. See also http://www.gotw.ca/publications/mill18.htm.