自定义 unique_ptr delete

  1. template<typename _Tp>
  2. struct default_delete
  3. {
  4. /// Default constructor
  5. constexpr default_delete() noexcept = default;
  6. /** @brief Converting constructor.
  7. *
  8. * Allows conversion from a deleter for objects of another type, `_Up`,
  9. * only if `_Up*` is convertible to `_Tp*`.
  10. */
  11. template<typename _Up,
  12. typename = _Require<is_convertible<_Up*, _Tp*>>>
  13. _GLIBCXX23_CONSTEXPR
  14. default_delete(const default_delete<_Up>&) noexcept { }
  15. /// Calls `delete __ptr`
  16. _GLIBCXX23_CONSTEXPR
  17. void
  18. operator()(_Tp* __ptr) const
  19. {
  20. static_assert(!is_void<_Tp>::value,
  21. "can't delete pointer to incomplete type");
  22. static_assert(sizeof(_Tp)>0,
  23. "can't delete pointer to incomplete type");
  24. delete __ptr;
  25. }
  26. };