Opened 6 years ago
Closed 6 years ago
#276 closed ожидается проверка (задача сдана)
Tankov Vladislav HW4
Reported by: | tankov.vladislav | Owned by: | rutsky,grabovoy.philipp |
---|---|---|---|
Priority: | проверка | Milestone: | ha4-deadline |
Component: | HA#4 function | Version: | |
Keywords: | Cc: |
Description
Change History (15)
comment:1 Changed 6 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 6 years ago by
Tested revision 598 by tankov.vladislav.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
WARNING | ||||
SUCCESS | ||||
SUCCESS | ||||
WARNING | ||||
SUCCESS | ||||
WARNING | ||||
SUCCESS | ||||
Common header used in some tests: common.h
comment:3 Changed 6 years ago by
Milestone: | ha4-milestone2 → ha4-deadline |
---|
Владислав, исправьте, пожалуйста, предупреждения при компиляции, которые показывают автотесты (warning: unused parameter 'aNullptr'
).
При хранении свободной функции с той же сигнатурой, что и шаблонный параметр fn::function
, нет необходимости в type erasure (с использованием runnable
) --- вы можете хранить такую функцию просто как указатель на функцию, при этом вам не потребуется выделение памяти и лишний косвенный доступ к памяти (в таблицу виртуальных функций) для вызова функции.
Реализуйте, пожалуйста, оптимизацию для хранения свободной функции с совместимой сигнатурой.
comment:4 Changed 6 years ago by
Tested revision 762 by tankov.vladislav.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
SUCCESS | ||||
FAILURE | exit code 139 | |||
Common header used in some tests: common.h
comment:5 Changed 6 years ago by
Tested revision 763 by tankov.vladislav.
All tests passed. Good job!
comment:6 Changed 6 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
comment:7 Changed 6 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Замечания:
- В каком случае условие данного
if
будет истинно?
function(function &&func_in) noexcept { if (this != &func_in) { ...
- Используйте
swap()
членов для реализацииswap()
function
:
void swap(function &func_in) { runnable *tmp_func = func_in.func; func_in.func = func; func = tmp_func; free_func_type tmp_free_func = func_in.func_free; func_in.func_free = func_free; func_free = tmp_free_func; }
- Вместо использования сырого указателя на
runnable
, используйтеstd::unique_ptr
--- это легковесная обертка, которая позволит упросить код и сделать его более безопасным (испключает случайное копирование и не требует явного вызоваdelete
).
- В данном операторе произойдёт ошибка в
func_in.func->copy()
, еслиfunc_in.func == nullptr
:
function &operator=(const function &func_in) { assert(false); if (this != &func_in) { delete func; func = func_in.func->copy(); func_free = func_in.func_free; } return *this; }
Эта ошибка не проявляется на практике, т.к. определённый вами
template<class F> function &operator=(F &&runnable)
принимает "универсальную ссылку" и фактически используется для всех=
.
Вы можете оставить только этот оператор и фактически реализовать копирование через использование конструктор иswap
(только убедитесь, что вы корректно муваете функтор).
comment:8 Changed 6 years ago by
Tested revision 804 by tankov.vladislav.
All tests passed. Good job!
comment:10 Changed 6 years ago by
Tested revision 813 by tankov.vladislav.
All tests passed. Good job!
comment:11 Changed 6 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
comment:12 Changed 6 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Tested revision 814 by tankov.vladislav.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
SUCCESS | ||||
FAILURE | exit code 139 | |||
Common header used in some tests: common.h
comment:13 Changed 6 years ago by
Tested revision 815 by tankov.vladislav.
All tests passed. Good job!
comment:14 Changed 6 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Tested revision 598 by tankov.vladislav.
Smoke tests
test
stage
result
info
log
run_function_smoke_test.cpp
run_function_smoke_test-gcc62.log
run_function_smoke_test-valgrind.log
run_function_smoke_test-gcc62-asan.log
run_function_smoke_test-clang-san.log
Common header used in some tests: common.h