fork download
  1. #include <iostream>
  2. #include <unordered_map>
  3. #include <map>
  4. #include <cinttypes>
  5.  
  6. class MyClass
  7. {
  8. typedef std::unordered_map<uint32_t, MyClass> Instances;
  9. friend Instances;
  10. friend std::pair<uint32_t, MyClass>;
  11. friend std::pair<const uint32_t, MyClass>;
  12. public:
  13. static const MyClass& getObject(uint32_t key) { return instances_[key] = 2 * key; }
  14. ~MyClass() {}
  15. int n() const { return n_; }
  16. private:
  17. MyClass() : n_(-1) { }
  18. MyClass& operator=(int n) { n_ = n; return *this; }
  19. int n_;
  20. static Instances instances_;
  21. };
  22.  
  23. MyClass::Instances MyClass::instances_;
  24.  
  25. int main() {
  26. const MyClass& m20 = MyClass::getObject(20);
  27. const MyClass& m21 = MyClass::getObject(21);
  28. std::cout << m20.n() << ' ' << m21.n() << '\n';
  29. }
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
40 42