singleton class with safe construction and assignment, unlike normal examples which have a use case to create two singletons