
Sergey
21.04.2017
23:41:25
он подчеркивает именно переменную m_flags
которую я тут value обозвал

Alex Фэils?︙
21.04.2017
23:41:48
скорее всего, семантика решарпера бажит, и думает ,что вал не инициализирован внутри конструктора

Alexander
21.04.2017
23:41:57
репорти багу - решарпер неправ

Google

Sergey
21.04.2017
23:43:54
а еще вот такая штука. если в конструкторе класса зовется виртуальная функция из этого же класса - идет такой ворнинг
что-то вроде virtual function will be resolved statically

Vladislav
21.04.2017
23:44:27
а вот тут он прав

Artem
21.04.2017
23:44:32

Sergey
21.04.2017
23:44:37
показал коллегам - они говорят, вообще нельзя вызывать виртуальные функции в конструкторе
как оно обстоит дело

Vladislav
21.04.2017
23:45:21
формально можно, но это как себе по ногам стрелять - не рекомендуется

Sergey
21.04.2017
23:45:52
идем дальше
нашелся участок, где виртуальная функция вызывалась в декструкторе
тот же самый ворнинг. коллеги сказали - ерунда, в деструкторе все норм
но неуверенно
предположили, что может у них там для симметрии в решарпере так сделали. один ворнинг на ctor/dtor

Artem
21.04.2017
23:47:31
Нет, и там и там логика одна и та же, это будет реализация функции из этого класса

Google

Vladislav
21.04.2017
23:47:39
в деструкторе тоже не норм - на момент выполнения деструктора базового класса дети уже задестракчены

Artem
21.04.2017
23:47:41
Не из сына

Sergey
21.04.2017
23:48:03

Alexander
21.04.2017
23:48:21

Vladislav
21.04.2017
23:48:22
обычно - ошибка

Sergey
21.04.2017
23:48:22
т.е. все же работает прекрасно. высказали мнение, что под другим комплилятором может и не работать

Alexander
21.04.2017
23:48:38

Vladislav
21.04.2017
23:48:40
в том смысле что так делать в продакшн-коде опасно

Sergey
21.04.2017
23:49:16
случай-то нифига не искуственный

Artem
21.04.2017
23:49:17
Нет, дело в том, что когда ты пишешь вызов виртуальной функции, ты можешь ожидать, что вызовется перегруженная
И это предупреждение

Sergey
21.04.2017
23:49:41
вот представьте, что нужно перед удалением класса выполнить некий deinit

Artem
21.04.2017
23:49:47
Сродни предупреждению if(a = b)

Sergey
21.04.2017
23:49:48
и он виртуальный

Artem
21.04.2017
23:50:04
Этот код не ошибка, но подозрительный

Sergey
21.04.2017
23:50:11
ну и как? заставить пользователя писать
cl->deinit;
delete cl;

Artem
21.04.2017
23:50:48

Sergey
21.04.2017
23:51:05
а потому что есть 2 реализации. под d3d и openGL
deinit выполняет совершенно разные действия

Artem
21.04.2017
23:51:42
А почему в деструкторе не написать вызов своих деинитов

Google

Sergey
21.04.2017
23:51:48
а деструктор у них одинаковый. deinit, четотам clear и все

Vladislav
21.04.2017
23:51:48
ну так и вызывай его в соответствующих дочерних деструкторах

Artem
21.04.2017
23:51:51
Зачем общий метод?

Sergey
21.04.2017
23:51:56
продублировал логику
не настолько неудобно, чтобы вешаться - но неудобно

Vladislav
21.04.2017
23:52:54
ну вот иначе не сделать, в рамках того как в c++ сделано наследование

Sergey
21.04.2017
23:53:13
окей. я просто убедился, что верно понял суть происходящего
вообще, удивлен, насколько разные вещи мне находят PVS studio, cppcheck и resharper
совсем разные. надо гонять все три
а, и в vs2017 же есть анализатор.

Artem
21.04.2017
23:54:26
Были бы у тебя коверити или клокворк или мы, находили бы еще разные

Artem
21.04.2017
23:54:42
Статический анализ сложная штука)

Sergey
21.04.2017
23:54:47
в целом, решарпер мне пока не нравится

Artem
21.04.2017
23:54:53
Начиная с определения ошибки

Sergey
21.04.2017
23:54:55
посижу на нем до конца триалки
по местами он просто мешает
из понравившегося - находит бесполезные #include, #define - секции

Vladislav
21.04.2017
23:55:32
clang-tidy еще добавьте

Google

Artem
21.04.2017
23:56:01

Sergey
21.04.2017
23:56:17
из непонравившегося - мания писать "этот метод можно сделать static/const" в случаях, когда нельзя на самом деле
т.е. побитово-то он конст, а по сути нет
лезет в неконстантный метод по ссылке
кому-то может и норм, а я const понимаю все-таки как аналог "чистой функции"
иначе самообман

Artem
21.04.2017
23:57:36
В крестах все самообман

Vladislav
21.04.2017
23:57:38
кстати, с каких пор вообще resharper умеет плюсы анализировать?

Sergey
21.04.2017
23:57:47
вроде полгода уже умеет

Vladislav
21.04.2017
23:58:05
там анализатор из clion'а?

Admin
ERROR: S client not available

Sergey
21.04.2017
23:58:15
не знаю. может быть

Artem
21.04.2017
23:58:25
Мне казалось, они давно умеют

Sergey
21.04.2017
23:58:51
еще что понравилось: кликаешь по интерфейсной функции, тебе показывают все ее реализации, и можешь перейти к нужной
т.е. goto definition/declaration намного более удобный
а вот что не понравилось: контекстный поиск, или как это назвать. список, который вываливается когда пишешь

Artem
22.04.2017
00:00:08
Они специализируются на супер быстром анализе и тулзах для быстрой разработки и рефакторинга

Aldar
22.04.2017
00:00:17
Почему вызывать виртуальные функции из конструктора плохо? Она же просто ведет себя как не виртуальная

Sergey
22.04.2017
00:00:20
вот написал ты строчку: some_class_instance->
и тебе показывают не только методы класса SomeClass

Google

Sergey
22.04.2017
00:01:14
а еще почему-то и все функции, которые можно применить к нему. т.е. получится Foo(some_class_instance);
это при том, что стрелку написал
что в результате: протекают сотни функций из winapi, которые можно применить к чему угодно, т.к. там void* во все поля
список засран и бесполезен

Artem
22.04.2017
00:02:02

Sergey
22.04.2017
00:02:56
понравилась цветовая схема, хотя по идее ее можно и плагинами сделать
недоумение вызвали "фичи" вроде "перейти к следующему методу класса"; "подвинуть строчку на 1 вверх" и прочий шлак

Artem
22.04.2017
00:03:52

Aldar
22.04.2017
00:04:10

Artem
22.04.2017
00:05:15

Sergey
22.04.2017
00:06:21
а, вот еще. идиотизм. код вроде
if ( auto editor = Editor::get())
if ( auto node = editor->find("node0"))
он помечает ворнингом. using assign as expression, или как-то так
по-моему, вполне нормальный стиль
const double a = calc_something();
const float b = calc_something_float();
- предлагает мне убрать double, float и написать везде auto
нахрена? я понимаю, в шаблонах auto, и там, где тип очевиден. а в таких вещах он важен

Alexander
22.04.2017
00:08:06
Что вполне логично

Sergey
22.04.2017
00:08:21
таки все верно я написал

Artem
22.04.2017
00:08:26

Sergey
22.04.2017
00:08:40
охуеть теперь. можо перепутать.
а как бы вы это оформили?

Vladislav
22.04.2017
00:09:29

Artem
22.04.2017
00:10:17
Ну наверное да, стоит разделять ассайнмент и декларейшн