leaky_singleton.h 782 B

1234567891011121314151617181920212223242526272829303132333435
  1. #pragma once
  2. namespace NYT {
  3. ////////////////////////////////////////////////////////////////////////////////
  4. template <class T>
  5. class TLeakyStorage
  6. {
  7. public:
  8. template <class... TArgs>
  9. explicit TLeakyStorage(TArgs&&... args);
  10. T* Get();
  11. private:
  12. alignas(T) char Buffer_[sizeof(T)];
  13. };
  14. ////////////////////////////////////////////////////////////////////////////////
  15. #define DECLARE_LEAKY_SINGLETON_FRIEND() \
  16. template <class T> \
  17. friend class ::NYT::TLeakyStorage;
  18. template <class T, class... TArgs>
  19. T* LeakySingleton(TArgs&&... args);
  20. ////////////////////////////////////////////////////////////////////////////////
  21. } // namespace NYT
  22. #define LEAKY_SINGLETON_INL_H_
  23. #include "leaky_singleton-inl.h"
  24. #undef LEAKY_SINGLETON_INL_H_