- 1
value = *((const char*)(*it).second.value);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+7
value = *((const char*)(*it).second.value);
void* -> const char* -> char
Возможно можно было вместо (*it). написать it-> Иначе хз в чем именно гк
В потенциальном UB'е, например. Вдруг в it->second.value был нулл или слишком короткий буфер. Я бы въебал как минимум ассёрт.
Я бы просто въебал. Нехуй void* использовать. По крайней мере можно было выделить эту хуйню в функцию.
Ну, по-хорошему, это должно быть в акцессоре у того, у чего брали value (а само value - в привате)...
А на крестах я сегодня ведь день проебал чтобы скрестить ужа с ежом - чтобы и память лишний раз не аллоцировало, и исключения не кидало (но ошибки не теряло), и кишки сишной реализации наружу не торчали, и типобезопасно было, и все типичные юзкейсы няшно и кратко смотрелись...
В итоге закончилось всё void* в единственном приватном поле у всех публичных классов этого модуля ;(
> Кресты - говно
Удивил. Всё говно, кроме говна — оно ценное удобрение. Но не всё. Некоторое говно — говно.
чтобы и память лишний раз не аллоцировало
Там void* не потому что много разных вариантов, а потому что структуру в хедере палить нельзя (она сишная, т.е. попадёт в корневой неймспейс). А саму структуру в any сунуть тоже нельзя, т.к. класс не должен контролировать её время жизни (чё-то типа итератора)...
А не хочется палить даже имя структуры? Потому что для объявления указателя достаточно объявления struct kokoko;
А вдруг * перегружена? Ну а вдруг?
З.Ы. Их как бы парочкой обычно и перегружают.