ExpressionParsing::PlainAccessorFactory Node1 ExpressionParsing:: PlainAccessorFactory + registerStdVectorKit() + registerPlainValueKit() + PlainAccessorFactory() + createAccessor() + registerReadKey() + throwFailedToAddHandle() + registerReadKey() Node4 std::atomic< PlainAccessor Factory * > Node1->Node4 +ptr Node2 ExpressionParsing:: Singleton< PlainAccessorFactory > + instance() Node2->Node1 Node3 CxxUtils::CachedUniquePtr T< PlainAccessorFactory > + CachedUniquePtrT() + CachedUniquePtrT() + CachedUniquePtrT() + operator=() + ~CachedUniquePtrT() + set() + store() + get() + operator*() + operator->() + operator bool() + release() Node3->Node2 -ATLAS_THREAD_SAFE Node4->Node3 -m_ptr Node5 std::unordered_map < std::size_t, std:: unique_ptr< ExpressionParsing ::PlainAccessorFactory::IKit > > + keys Node5->Node1 -m_kits Node6 std::unique_ptr< Expression Parsing::PlainAccessorFactory ::IKit > + operator->() Node6->Node5 +elements Node7 ExpressionParsing:: PlainAccessorFactory::IKit + ~IKit() + createAccessor() + registerReadKey() Node7->Node6 +ptr