Conversation
czertyaka
left a comment
There was a problem hiding this comment.
Хорошая реализация, но в ней есть одна "стратегическая" ошибка — выбран не лучший способ назначать новые дескрипторы.
| #define UNUSED(VAR) (void)(VAR) | ||
| #include <unordered_map> | ||
| #include <vector> | ||
| #include <stdexcept> |
There was a problem hiding this comment.
Кажется, заголовок не используется. Вы везде ловите исключения через ...
| const char* source_data = top_node->data.data(); | ||
| char* dest_data = static_cast<char*>(data); | ||
|
|
||
| for (std::size_t i = 0; i < copy_size; ++i) { |
There was a problem hiding this comment.
Можно использовать std::memcpy
| return; | ||
| } | ||
|
|
||
| Stack& stack = it->second; |
There was a problem hiding this comment.
Посмотрите срабатывания стат. анализатора (шаг SAST в Workflow). Он вам там подсказывает, что тут можно можно сделать ссылку константной.
| } | ||
| struct Node { | ||
| std::vector<char> data; | ||
| Node* next; |
There was a problem hiding this comment.
Раз завернули данные в std::vector вместо сырого указателя, то тут можно было бы использовать std::optional или умный указатель.
| Handle create() | ||
| { | ||
| try { | ||
| Handle handle = next_handle++; |
There was a problem hiding this comment.
Конечно, вряд ли такое произойдет, но лучше сравнивать с std::numeric_limits<Handle>::max(), чтобы не было переполнения.
| Handle create() | ||
| { | ||
| try { | ||
| Handle handle = next_handle++; |
There was a problem hiding this comment.
Стратегия выделения нового идентификатора не самая лучшая. Подумайте, что произойдет в такой ситуации:
const std::size_t max =
std::size_t{std::numeric_limits<Handle>::max()}
+ 2;
for (std::size_t i = 0u; i < max; ++i) {
const Handle h = create();
destroy(h);
}Такая программа одновременно держит не более одного инстанса стека. Тем не менее, ваша реализация такое использование обработает некорректно.
There was a problem hiding this comment.
Такой тест, наверное, стоит добавить, но в этом случае придется менять реальный тип с int на char. Иначе тест будет идти слишком долго.
czertyaka
left a comment
There was a problem hiding this comment.
Посмотрите, пожалуйста, на тесты, они не прошли
czertyaka
left a comment
There was a problem hiding this comment.
Задание принято. Непоправленные замечания минорные.
No description provided.