- 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++? Легко!
В итоге вся эта петушня бесполезна. Проверять угазатель на null нужно до разыменования.
Сделал хидер себе вроде такого
checkItem(const Foo* item)
Так я уже могу вызвать эту функцию из своего кода на ++.
Оставалась проблемка создать объект Foo ... слава яйцам, конструктор Foo там тоже экспортирован был, тупо распределял на вскидку большой кусок памяти и отдавал его конструктору из либы.
Но вопщем-то да, ссылка - это синтаксический сахар, на самом деле там указатель.
Знаешь зачем?
1) alloc (выделение памти
2) init (конструктор, инициализация внутреннего состояния)
В случае ошибки тебе вернут nil. Например, если не удалось сделать alloc или init.
Так вот вызов родительского init возвращает тебе self.
Его нужно проверить на nil, потому что если он nil то нет смысла вызывать свой конструктор: ошибка в родителе.
Потому в Objc можно встреить такой код
Зато можно аллоцировать на разных аллокаторах в независимости от конструктора) Ну точнее раньше так было.
Конструктор может вернуть или nil или объект.
Мой первый язык, не судите строго плиз.
Ты меня запутал >_< Если раньше это было уб, то проверка и тогда не имела смысла "по стандарту".
уже не катит???
Он же const...
Ну это же ахуенно! Можно прямо из метода переаллоцироваться и пофиксить указатель на себя в вызывающем коде.
https://godbolt.org/g/9HvU1a