Advertisement
kolbka_

Untitled

Jan 30th, 2022
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.89 KB | None | 0 0
  1. #ifndef UNIQUE_PTR_GUARD
  2. #define UNIQUE_PTR_GUARD
  3. #include <algorithm>
  4.  
  5. namespace ptrs::unique {
  6. template <typename T>
  7. struct default_deleter {
  8.     void operator()(T *ptr) {
  9.         delete ptr;
  10.     }
  11. };
  12.  
  13. template <typename T, typename Deleter = struct default_deleter<T>>
  14. struct unique_ptr {
  15. private:
  16.     T *ptr_on_object;
  17.     Deleter my_deleter;
  18.     void delete_data() {
  19.         if (ptr_on_object != nullptr) {
  20.             my_deleter(ptr_on_object);
  21.         }
  22.     }
  23.  
  24. public:
  25.     explicit unique_ptr(T *cur_ptr, const Deleter &tmp)
  26.         : ptr_on_object(std::exchange(cur_ptr, nullptr)),
  27.           my_deleter(tmp) {  // solve problem with rvalue and lvalue Deleters
  28.     }
  29.  
  30.     explicit unique_ptr(T *cur_ptr, Deleter &&tmp)
  31.         : ptr_on_object(std::exchange(cur_ptr, nullptr)),
  32.           my_deleter(std::move(tmp)) {
  33.     }
  34.  
  35.     unique_ptr() : ptr_on_object(nullptr) {
  36.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement