Подробнее
class A { • ►! public void MethodQ { i ; Console. Writel_ine( "method"); i } class Program { • static void Main(string[] args) { ]___i A pj = null; = ' iWibaiPBim <g) : } ■j. Исключение не обработано i X System.NullReferenceException: "Ссылка на объект указывает на то, что ты бездарь." а было null.
it-юмор,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,бездарность
Еще на тему
A a;
a.Method();
А на скриншоте нал как раз написали что бы до бездарей дошло и они бы тоже поржали.
A a = new A();
Это конечно очень, очень плохо так делать, но в С++ вызов метода с нулевым this, если метод и класс не виртуальный совсем не УБ. Оно будет работать, и оно не может не работать, так как невиртуальный метод это обычная функция, имя которой было mangled особым образом.
Я видел сотню раз, как во всяких опенсорсных либах это эксплойтилось для разных хаков.
не будет, начиная с версии gcc, ЕМНИП, 9
Вот ниже асм сгенереный gcc 9.2, почему оно должно не работать?
https://godbolt.org/z/zaN33V
где я спорю с тем, что это УБ?
>> оно то скорее всего таки де юро УБ, но во всех имплементациях плюсов работать будет
Вообще желательно конечно найти где именно в стандарте это УБ, потому как дереференса поинтера здесь не происходит, поэтому не все однозначно.
Я говорю о том, что оно работать на всех имплементацих будет, и подругому быть не может. Просто потому, что так язык устроен, и ему нужно обратная совместимость с С.