#94 closed ожидаются исправления (задача сдана)
Linked_ptr
Reported by: | Alexander | Owned by: | Vladimir Rutsky |
---|---|---|---|
Priority: | проверка | Milestone: | |
Component: | HA#3 linked_ptr | Version: | |
Keywords: | Cc: |
Description
Здравствуйте, Владимир.
Прошу проверить задание 3.
Также прошу все же проверить задание 2, с первого майлстоуна все же висит.
Спасибо.
С уважением,
Александр
Change History (26)
comment:1 Changed 7 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 7 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
comment:3 Changed 7 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Tested revision 540 by bzikadze.aleksandr.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
Common header used in some tests: common.h
comment:4 Changed 7 years ago by
Tested revision 630 by bzikadze.aleksandr.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | FAILURE | exit code 1 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
Common header used in some tests: common.h
comment:5 Changed 7 years ago by
Tested revision 631 by bzikadze.aleksandr.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | FAILURE | exit code 1 | ||
gcc62 | SUCCESS | |||
run | FAILURE | exit code 139 | ||
Common header used in some tests: common.h
comment:6 Changed 7 years ago by
Tested revision 636 by bzikadze.aleksandr.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | FAILURE | exit code 1 | ||
Common header used in some tests: common.h
comment:7 Changed 7 years ago by
Tested revision 640 by bzikadze.aleksandr.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
Common header used in some tests: common.h
comment:8 Changed 7 years ago by
Tested revision 641 by bzikadze.aleksandr.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
Common header used in some tests: common.h
comment:9 Changed 7 years ago by
Tested revision 643 by bzikadze.aleksandr.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | SUCCESS | |||
run | WARNING | |||
valgrind | WARNING | |||
gcc62-asan | SUCCESS | |||
asan | WARNING | |||
clang-san | SUCCESS | |||
san | WARNING | |||
gcc62 | SUCCESS | |||
run | WARNING | |||
valgrind | WARNING | |||
gcc62-asan | SUCCESS | |||
asan | WARNING | |||
clang-san | SUCCESS | |||
san | WARNING | |||
Common header used in some tests: common.h
comment:10 Changed 7 years ago by
Tested revision 644 by bzikadze.aleksandr.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
gcc62 | FAILURE | |||
Common header used in some tests: common.h
comment:11 Changed 7 years ago by
Tested revision 650 by bzikadze.aleksandr.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
Common header used in some tests: common.h
comment:12 Changed 7 years ago by
Tested revision 653 by bzikadze.aleksandr.
Main tests
Common header used in some tests: common.h
comment:13 Changed 7 years ago by
Tested revision 655 by bzikadze.aleksandr.
Main tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | FAILURE | |||
run_gen_016_6x7_027x428_70x90_3x4_3x5_2x6_4x7_7x7_94DC920E.cpp | gcc62 | SUCCESS | ||
run | FAILURE | exit code 139 | run_gen_016_6x7_027x428_70x90_3x4_3x5_2x6_4x7_7x7_94DC920E-run.log | |
run_gen_021_8x9_4113x4861_397x815_4x4_3x4_5x5_4x4_C4F2B4F7.cpp | gcc62 | SUCCESS | ||
run | FAILURE | exit code 139 | run_gen_021_8x9_4113x4861_397x815_4x4_3x4_5x5_4x4_C4F2B4F7-run.log | |
run_gen_030_06x14_229x428_01476078x30421754_4x4_3_54CD291D.cpp | gcc62 | SUCCESS | ||
run | FAILURE | exit code 139 | run_gen_030_06x14_229x428_01476078x30421754_4x4_3_54CD291D-run.log | |
run_gen_055_15x26_28180541x35357669_1448194617849_DF45FC8F.cpp | gcc62 | SUCCESS | ||
run | FAILURE | exit code 139 | run_gen_055_15x26_28180541x35357669_1448194617849_DF45FC8F-run.log | |
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | FAILURE | exit code 1 | ||
gcc62-asan | SUCCESS | |||
asan | FAILURE | exit code 1 | ||
clang-san | SUCCESS | |||
san | FAILURE | exit code 1 | ||
Common header used in some tests: common.h
comment:14 Changed 7 years ago by
Tested revision 666 by bzikadze.aleksandr.
All tests passed. Good job!
comment:15 Changed 7 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
comment:16 Changed 7 years ago by
Resolution: | → задача сдана |
---|---|
Status: | new → closed |
Решение зачтено.
Бонусное задание не выполнено.
Тест для бонусного задания (должен компилироваться без предупреждений):
#include "linked_ptr.hpp" struct C; int main() { // Should compile. Completeness of C is not needed. smart_ptr::linked_ptr<C> p1; smart_ptr::linked_ptr<C> p2(p1); // Shouldn't compile: //smart_ptr::linked_ptr<C> p3(reinterpret_cast<C *>(123)); //p1.reset(reinterpret_cast<C *>(123)); }
comment:17 Changed 7 years ago by
Resolution: | задача сдана |
---|---|
Status: | closed → reopened |
comment:18 Changed 7 years ago by
Tested revision 687 by bzikadze.aleksandr.
All tests passed. Good job!
comment:19 Changed 7 years ago by
Оставил вопрос в комментарии перед конструктором от указателя по поводу, почему решение (если оно верное) работает.
Так, задача не сдана еще, самое главное про предупреждения не заметил :)
comment:20 Changed 7 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
Tested revision 691 by bzikadze.aleksandr.
Smoke tests
test | stage | result | info | log |
---|---|---|---|---|
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | SUCCESS | |||
gcc62-asan | SUCCESS | |||
asan | SUCCESS | |||
clang-san | WARNING | |||
san | SUCCESS | |||
gcc62 | SUCCESS | |||
run | SUCCESS | |||
valgrind | SUCCESS | |||
gcc62-asan | SUCCESS | |||
asan | SUCCESS | |||
clang-san | WARNING | |||
san | SUCCESS | |||
Common header used in some tests: common.h
comment:21 Changed 7 years ago by
Александр,
Vladimir, is it true, that method of a template class that is known (at compile time)
not to be used is not even generated and that is why it works?
Неиспользуемые шаблонные сущности (методы шаблонного класса, шаблонные методы или функции) не генерируются и не записываются в объектный модуль, но при этом компилятор может проверить их компилируемость.
Если поискать в интернете, то можно найти цитату из Стандарта C++ (14.6 [temp.res]/8):
If no valid specialization can be generated for a template definition, and that template is not instantiated, the template definition is ill-formed, no diagnostic required.
Т.е. если шаблонная сущность никогда не может быть корректна инстанциирована, то это ошибочный код.
Но проверить, существуют ли параметры, приводящие к валидной инстанциации, часто сложно (или даже невозможно), поэтому Стандарт не требует от компилятора выводить сообщение об ошибке.
Что-то компилятор может проверить, например, про static_assert(false, "")
g++/clang всегда ругаются.
Некоторые компиляторы, например, старые версии Visual Studio, просто не смотрят на содержимое неиспользуемых шаблонных методов, и там можно хоть кириллицей написать мама-мыла-раму
, он это скомпилирует (пока соответствующий метод не будет использоваться).
Текущее закоммиченное решение (ревизия 687) некорректно, т.к. например оно скомпилирует следующий код с предупреждениями (которые фактически выльются в ошибки):
#include "linked_ptr.hpp" struct C; void free_pointer(smart_ptr::linked_ptr<C> & ptr) { ptr.reset(); } int main() { }
comment:22 Changed 7 years ago by
Tested revision 694 by bzikadze.aleksandr.
All tests passed. Good job!
comment:23 Changed 7 years ago by
Утверждается, что текущее решение должно быть корректным. Посмотрите, пожалуйста.
comment:24 Changed 7 years ago by
Сейчас вы удаляете объект, только если в данной единице трансляции он был полным, что приведёт к утечке памяти, если передать построенный объект из другой единицы трансляции и попытаться уничтожить его в первой единице трансляции.
comment:25 Changed 7 years ago by
Resolution: | → задача сдана |
---|---|
Status: | reopened → closed |
Smoke tests
test
stage
result
info
log
run_linked_ptr_gen_smoke_test.cpp
gcc62
run
exit code 139
run_linked_ptr_gen_smoke_test-run.log
run_smoke_test.cpp
gcc62
run
exit code 139
Common header used in some tests: common.h