Change History (8)

comment:1 Changed 4 years ago by Артур Гулецкий (huletski)

Некоторые проблемы с корректностью:

  • такой код не компилируется:
    my_vector::my_vector<int> v1, v2;
    v1 = std::move(v2);
    
  • гарантии исключений: если методы хранимого класса (ctors, op=) бросают исключения, valgrind находит ошибки. Например, если при вызове конструктора my_vector(std::size_t) исключение бросится в момент инициализации элементов, неясно кто будет освобождать буфер с неинициализированной памятью;
  • почему-то reserve копирует, хотя можно перемещать? Посмотрите, можно ли использовать move'ы в других местах в коде;

По коду:

main.cpp

  • отступы;
  • 27: используйте strncpy;
  • 55, 62: дублирование;

my_vector.h

  • кое-где можно модификатор & дописать;
  • noexcept у методов не хватает (e.g. empty);

my_vector_impl.h

  • 20: слишком длинная строка, неудобно читать. Можно переформатировать так:
    Foo(...)
      : field1_(...)
      , field2_(...) {}
    
  • дублирование логики "скопировать интервал значений", "удалить интервал значений", "инициализировать по умолчанию интервал значений";
  • дублирование логики op[] const и op[]. Если про static_cast/const_cast на лекциях еще не было, можно оставить как есть;
  • (fyi) в push_back лишний вызов move ctor по сравнению с версией, которая принимала бы const T&. При дорогом с т.з. производительности move ctor у Т это может быть проблемой.

Баллы: 4.5, доделывайте.

Last edited 4 years ago by Артур Гулецкий (huletski) (previous) (diff)

comment:2 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления

comment:3 Changed 4 years ago by stotskiy.nikita

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:4 Changed 4 years ago by Артур Гулецкий (huletski)

my_vector_impl.h

  • 51: отступы
  • дублирование кода (чтo-то сделать на интеревале с элементами в таком-то порядке), много дублирования. Особенно заметно в обработчиках исключений;
  • 102: если здесь вылетит исключение и был изменен размер буфера, строгие гарантии будут нарушены.

main.cpp

  • такой код не компилируется:
    product::Product p1("a", 0, 0), p2("b", 1, 1);
    p1 = std::move(p2);
    
  • 31, 70: отступы.

Баллы: 6.75, доделывайте.

comment:5 Changed 4 years ago by Артур Гулецкий (huletski)

my_vertor_impl.h

  • 103: отступы;
  • 102: resize в случае исключения при конструировании объектов: а) "съедает" исключение b) все еще нарушает строгие гарантии. Сценарий: увеличивается размер буфера (как следствие capacity), после чего Т() бросает исключение -> объект-вектор частично изменился;
  • все еще дублирование кода (см. пред. комментарий).

main.cpp

  • отступы: внутри namespace product у определения класса их нет, у определений методов есть -- выберите какой-то один вариант.

Баллы: 7, доделывайте.

comment:6 Changed 4 years ago by Артур Гулецкий (huletski)

UPD: и с

product::Product p1("a", 0, 0), p2("b", 1, 1);
p1 = std::move(p2);

все еще проблемы.

Если будет исправлять, напишите в комментарии какие замечания чините.

comment:7 Changed 4 years ago by Артур Гулецкий (huletski)

Type: ожидается проверкаожидаются исправления

comment:8 Changed 4 years ago by Артур Гулецкий (huletski)

Resolution: задача сдана
Status: assignedclosed

Дедлайн.

Note: See TracTickets for help on using tickets.