Ответы пользователя по тегу C++
  • Как создать конструктор для динамического массива?

    @robert_ford
    #include <iostream>
    template <typename T> class MyArray{
      T* arr;
      size_t size;
      public:
      MyArray(size_t size): size(size) {
        arr = new T[size];
      }
    
      MyArray(T* ptr, size_t size ):size(size), arr(ptr) {} 
      // деструктор
      ~MyArray(){ 
        if(arr == nullptr) return;
        delete[] arr;
      }
    
      // оператор перемещающего присваивания
      MyArray& operator=(T&& src) noexcept { 
        arr = src.arr;
        size = src.size;
        src.arr = nullptr;
        src.size = 0;
        return *this;
      }
    
    // конструктор перемещения
      MyArray(MyArray&& src) noexcept:size(src.size), arr(src.arr) { 
        src.arr = nullptr;
        src.size = 0;
      }
    
      T& operator[](size_t idx) {
        if(idx > size - 1 || idx < 0) throw std::out_of_range("Index is out of range");
        return arr[idx];
      }
    
    };
    
    int main() {
      int* p = new int[5]{0,1,2,3,4};
      MyArray<int> a{p, 5};
      a[0] = 5;
      std::cout << a[0] << std::endl;
      MyArray<int> b(std::move(a));
      std::cout << b[0];
    }

    Здесь, следуя правилу пяти, хорошо было бы также реализовать конструктор копирования и оператор копирующего присваивания.
    Ответ написан
    1 комментарий