noncopyable.h 910 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #pragma once
  2. /**
  3. * @class TNonCopyable
  4. *
  5. * Inherit your class from `TNonCopyable` if you want to make it noncopyable.
  6. *
  7. * Example usage:
  8. * @code
  9. * class Foo: private TNonCopyable {
  10. * // ...
  11. * };
  12. * @endcode
  13. */
  14. namespace NNonCopyable { // protection from unintended ADL
  15. struct TNonCopyable {
  16. TNonCopyable(const TNonCopyable&) = delete;
  17. TNonCopyable& operator=(const TNonCopyable&) = delete;
  18. TNonCopyable() = default;
  19. ~TNonCopyable() = default;
  20. };
  21. struct TMoveOnly {
  22. TMoveOnly(TMoveOnly&&) noexcept = default;
  23. TMoveOnly& operator=(TMoveOnly&&) noexcept = default;
  24. TMoveOnly(const TMoveOnly&) = delete;
  25. TMoveOnly& operator=(const TMoveOnly&) = delete;
  26. TMoveOnly() = default;
  27. ~TMoveOnly() = default;
  28. };
  29. }
  30. using TNonCopyable = NNonCopyable::TNonCopyable;
  31. using TMoveOnly = NNonCopyable::TMoveOnly;