- 1
- 2
- 3
- 4
- 5
- 6
- 7
/* public static */ bool
TestFooFactory::checkItem(const Foo& item)
{
if (!&item)
return false;
return true;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−16
/* public static */ bool
TestFooFactory::checkItem(const Foo& item)
{
if (!&item)
return false;
return true;
}
null-ccылки в C++? Легко!
Antervis 02.11.2016 20:49 # +3
Elvenfighter 02.11.2016 21:07 # +1
Psionic 03.11.2016 11:56 # 0
Soul_re@ver 03.11.2016 12:05 # 0
В итоге вся эта петушня бесполезна. Проверять угазатель на null нужно до разыменования.
Antervis 03.11.2016 12:09 # 0
inkanus-gray 03.11.2016 13:28 # +5
guest 30.12.2016 09:10 # 0
Сделал хидер себе вроде такого
checkItem(const Foo* item)
Так я уже могу вызвать эту функцию из своего кода на ++.
Оставалась проблемка создать объект Foo ... слава яйцам, конструктор Foo там тоже экспортирован был, тупо распределял на вскидку большой кусок памяти и отдавал его конструктору из либы.
Но вопщем-то да, ссылка - это синтаксический сахар, на самом деле там указатель.
guest 30.12.2016 14:40 # 0
bormand 02.11.2016 20:52 # 0
barop 02.11.2016 23:01 # −138
Знаешь зачем?
huesto 02.11.2016 23:06 # −75
barop 02.11.2016 23:16 # −135
1) alloc (выделение памти
2) init (конструктор, инициализация внутреннего состояния)
В случае ошибки тебе вернут nil. Например, если не удалось сделать alloc или init.
Так вот вызов родительского init возвращает тебе self.
Его нужно проверить на nil, потому что если он nil то нет смысла вызывать свой конструктор: ошибка в родителе.
Потому в Objc можно встреить такой код
Soul_re@ver 03.11.2016 00:01 # +4
barop 03.11.2016 00:08 # −138
huesto 03.11.2016 00:12 # 0
barop 03.11.2016 00:21 # −137
Зато можно аллоцировать на разных аллокаторах в независимости от конструктора) Ну точнее раньше так было.
Конструктор может вернуть или nil или объект.
gost 03.11.2016 10:08 # +4
Мой первый язык, не судите строго плиз.
Antervis 03.11.2016 05:39 # 0
Antervis 03.11.2016 05:48 # −1
inkanus-gray 03.11.2016 13:31 # 0
Antervis 03.11.2016 14:16 # 0
inkanus-gray 03.11.2016 14:35 # +1
Antervis 03.11.2016 15:27 # 0
huesto 03.11.2016 15:46 # 0
huesto 03.11.2016 15:48 # 0
Ты меня запутал >_< Если раньше это было уб, то проверка и тогда не имела смысла "по стандарту".
Steve_Brown 03.11.2016 18:01 # 0
Antervis 04.11.2016 00:10 # +1
Soul_re@ver 03.11.2016 14:42 # 0
blackhearted 04.11.2016 10:25 # 0
уже не катит???
bormand 04.11.2016 10:26 # +2
Он же const...
Soul_re@ver 04.11.2016 10:54 # +2
Antervis 08.11.2016 06:43 # +1
bormand 08.11.2016 06:44 # +2
Ну это же ахуенно! Можно прямо из метода переаллоцироваться и пофиксить указатель на себя в вызывающем коде.
Gay 08.11.2016 06:49 # 0
Antervis 08.11.2016 07:32 # 0
Gay 08.11.2016 07:36 # −2
DlangGovno 03.11.2016 00:03 # −1
https://godbolt.org/g/9HvU1a
guest 04.11.2016 11:04 # 0
guest 04.11.2016 14:53 # −73