nochnoikoshmar1

Untitled

May 23rd, 2023
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.45 KB | None | 0 0
  1. #include <cassert>
  2. #include <cstdlib>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <map>
  6. #include <algorithm>
  7. #include <iostream>
  8. #include <set>
  9. #include <vector>
  10. #include <numeric>
  11. #include <chrono>
  12. #include <type_traits>
  13. #include <sstream>
  14. #include <unordered_map>
  15. #include <stdexcept>
  16. #include <optional>
  17. #include <stack>
  18. #include <iomanip>
  19. #include <cstdlib>
  20. #include <thread>
  21. #include <random>
  22. #include <fstream>
  23. #include <algorithm>
  24. #include <deque>
  25. #include <cstddef>  // cstddef необходим для использования std::byte
  26. #include <cstdint>  // cstdint необходим для использования uint32_t и int64_t
  27. #include <ctime>
  28. #include <new>
  29. #include <cassert>
  30. #include <iterator>
  31. #include <string>
  32. #include <utility>
  33. #include <list>
  34. #include <string_view>
  35. #include <forward_list>
  36. #include <initializer_list>
  37. template <typename Type>
  38. class ArrayPtr {
  39. public:
  40.     ArrayPtr() = default;
  41.     explicit ArrayPtr(size_t size) {
  42.         if (!size){
  43.             raw_ptr_ = nullptr;
  44.             return;
  45.         }
  46.         try{
  47.             raw_ptr_ = new Type[size]();
  48.         }
  49.         catch(...) {
  50.             raw_ptr_ = nullptr;
  51.             throw;
  52.         }        
  53.     }    
  54.     ArrayPtr(ArrayPtr&& other) noexcept
  55.         : raw_ptr_(other.Release())
  56.     {}      
  57.     explicit ArrayPtr(Type* raw_ptr) noexcept {
  58.         raw_ptr_ = raw_ptr;
  59.     }
  60.     ArrayPtr(const ArrayPtr&) = delete;
  61.     ~ArrayPtr() {
  62.         delete[] raw_ptr_;
  63.     }
  64.     ArrayPtr& operator=(const ArrayPtr& rhs) = delete;    
  65.     ArrayPtr& operator=(ArrayPtr&& rhs) {
  66.         if (raw_ptr_ != nullptr) {
  67.             delete[] raw_ptr_;
  68.         }
  69.         raw_ptr_ = std::exchange(rhs.raw_ptr_, nullptr);
  70.         return *this;
  71.     }
  72.     [[nodiscard]] Type* Release() noexcept {
  73.         Type *t = raw_ptr_;
  74.         raw_ptr_ = nullptr;
  75.         return t;
  76.     }
  77.     Type& operator[](size_t index) noexcept {
  78.         return raw_ptr_[index];
  79.     }
  80.     const Type& operator[](size_t index) const noexcept {
  81.         return raw_ptr_[index];
  82.     }
  83.     explicit operator bool() const {
  84.         return raw_ptr_ != nullptr;
  85.     }
  86.     Type* Get() const noexcept {
  87.         return raw_ptr_;
  88.     }
  89.     void swap(ArrayPtr& other) noexcept {
  90.         // Реализуйте метод самостоятельно
  91.         std::swap(raw_ptr_, other.raw_ptr_);
  92.     }
  93. private:
  94.     Type* raw_ptr_ = nullptr;
  95.     size_t size_;
  96. };
Tags: array_ptr.h
Advertisement
Add Comment
Please, Sign In to add comment