fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. struct Object
  6. {
  7. virtual size_t usedMemory () = 0;
  8. };
  9.  
  10. template <typename T>
  11. struct Singleton : public Object
  12. {
  13. virtual size_t usedMemory () {return sizeof(T);}
  14.  
  15. static T * Get () {return instance ? instance : (instance = new T);}
  16. static void Destroy () {delete instance;}
  17.  
  18. static T * instance; // = nullptr;
  19. };
  20. template <typename T> T * Singleton<T>::instance = nullptr;
  21.  
  22. struct Simple : public Singleton<Simple>
  23. {
  24. int x, y, z;
  25. };
  26.  
  27. struct Complex : public Singleton<Complex>
  28. {
  29. virtual size_t usedMemory () {return sizeof(*this) + v.size() * sizeof(int);}
  30.  
  31. Complex () : v (42) {}
  32.  
  33. vector<int> v;
  34. };
  35.  
  36. int main() {
  37. // your code goes here
  38. cout << Simple::Get()->usedMemory() << endl;
  39. cout << Complex::Get()->usedMemory() << endl;
  40.  
  41. Complex::Destroy();
  42. Simple::Destroy();
  43. return 0;
  44. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
16
184