Так вот я и говорю, что всё запущено. Язык, в котором можно вызвать метод из неинициализированного указателя... Мне кажется, это достойно занесения в best practices выстрелов в ногу.
И ниговори. Где-то даже видел совет делать для этого специальный булевый мембер в классе. isInitialized. Сам такой проблемы никогда не замечал, но теперь ненавижу это говно еще больше.
Сам такой проблемы никогда не замечал, но теперь ненавижу это говно еще больше.
Ну тогда тебе сразу в копилку: я встречал такое, что при создании объекта одного класса инстанцировался объект другого (одноименного) класса, определенный в соседнем объектнике. Отлаживать подобное особенно доставляет
Язык, в котором можно вызвать метод из неинициализированного указателя
что убирает лишние проверки. и даёт свои 5 копеек к производительности. а вызов метода по не инициализированному указателю довольно легко отслеживается.
Мы обращались в фирму 1С с предложением ввести в язык (речь идет о версии 6.0) следующие конструкции :
ПОЧЕМУ БЫ И НЕ — проверяет условие еще раз (самый частый глюк старой 1С)
НЕПРЕМЕННО — выполняет оператор без сбоев и зависаний
ОТНЫНЕ — присваивает значение переменной так, чтобы оно там действительно оказалось. (присвоить переменной вида, к примеру, «Справочник» значение в языке 1С — порой очень непростая задача, иногда требующая конструкции аж из 4-х операций)
ВО ЧТО БЫ ТО НИ СТАЛО — выводит текст отчета который без этого оператора выводится через раз.
НЕ СПАТЬ — отключает внутренний глюкогенератор
Я СКАЗАЛ — выполняет команду до тех пор, пока она не выполнится.
ИМЕТЬ СОВЕСТЬ — приостановить выполнение команды при её зависании.
Почему-то фирма не прислушалась к нашему мнению..
Синтаксически - да, безусловно. Но то, что я должен каждый раз проверять, действительно ли x это x, лично меня бесит. То, что я нахожусь во Вселенной евклидовой геометрии, не надо каждый раз проверять, случайно? Что скорость света постоянна в инерциальной системе отсчёта? Что хиральность^W byte-order не поменялся?
Если брать андроид, то теоретически может. Внутри Activity один из методов выполняем в отдельном потоке. Во время этого активити прибивается (например, при смене ориентации), this будет указывать в пустоту.
то есть представьте ситуацию. есть SomeClass* x; если после
следует x = new SomeClass; то проблемы никакой. если следует
init(x), где он должен быть инициализирован, то очевидно, после функции должна идти проверка, был ли x фактически инициализирован. проверку можно провести либо сравнением с nullptr, либо перехватом исключения, в зависимости от спецификации ф-ции.
если же сразу после SomeClass* x; идёт x->func(), то, очевидно, это быдлокод. если же x инициализирован сразу после определения, то это в любом языке — источник ошибок.