Синтаксически правилен ли мой код?

Рейтинг: -4Ответов: 1Опубликовано: 14.02.2023

Код ниже, хочу узнать, правильно ли мой код написан (в плане ошибок оформления кода)

это структура, которая состоит из массива и некоторых функций, необходимых для него

template <typename T>
struct FlexArray{
    size_t size=0;
    T* arr;
    FlexArray() {
        arr = new T[size];
    }
    FlexArray(size_t sizem): size(sizem){
        arr = new T[size];
    }
    T& at(size_t i){
        return arr[i];
    }
    const T& at(size_t i) const {
        return arr[i];
    }
    const size_t& Size() const {
        return size;
    }
    FlexArray<T>& operator += (const FlexArray<T>& other){
        FlexArray<T> new_arr(size+other.size);
        for (int i=0;i<size;i++){
            new_arr.arr[i]=arr[i];
        }
        for (int i=0;i<other.size;i++){
            new_arr.arr[size+i]=other.arr[i];
        }
        delete [] arr;
        size=new_arr.size;
        arr=new_arr.arr;
        return *this;
    }
    FlexArray<T>& operator=(const FlexArray<T>& c){
        delete[] arr;
        size=c.size;
        arr = new T[size];
        for (int i=0;i<size;i++){
            arr[i]=c.arr[i];
        }
    return *this;}
        
    FlexArray<T> operator+(const FlexArray<T>& l){
        FlexArray<T> new_arr(size+l.size);
        new_arr=*this;
        new_arr+=l;
    return new_arr;}
    FlexArray<T>& operator *= (size_t fact){
        FlexArray<T> new_arr(size*fact);
        for(int i=0;i<fact;i++){
            for(int j=0;j<size;j++){
                new_arr.arr[i*size+j]=arr[j];
            }
        }
        *this=new_arr;
    return *this;}
    FlexArray<T> operator*(size_t f){
        FlexArray<T> new_arr(size);
        for (int i=0;i<size;i++){
            new_arr.arr[i]=arr[i];
        }
        new_arr*=f;
    return new_arr;}

};
template <typename T>
FlexArray<T> operator*(size_t f, const FlexArray<T>& arr){
    FlexArray<T> new_arr(arr.size);
        for (int i=0;i<arr.size;i++){
            new_arr.arr[i]=arr.arr[i];
        }
        new_arr*=f;
    return new_arr;}```


Ответы

▲ -1Принят

Код выглядит правильно с точки зрения оформления, но без дополнительного контекста сложно сказать, правильно ли он реализует заданные функциональности. Некоторые улучшения, которые можно было бы внести, — это использование const и ссылок на объекты в некоторых функциях, а также использование std::size_t вместо size_t.

Также хочу подметить: Конструктор по умолчанию создает массив с нулевой длиной. В результате вызова new T[size] внутри конструктора создается пустой массив. Возможно, это не является ожидаемым поведением для пользователей класса, поэтому имеет смысл определить, как класс должен вести себя при создании массива с нулевой длиной.