@vivieta

Как создать конструктор для динамического массива?

Нужно создать конструктор для массива DynArray с полями T* data и size_t size.

Конструктор перемещения с гарантией отсутствия исключения.

Не понимаю как это реализовать, помогите, пожалуйста
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
@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];
}

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы