С другой ответ :
Приводит ли это к утечке памяти, вытирает ли жесткий диск, делает ли вас беременной, заставляет ли это противных носовых демонов преследовать вас по вашей квартире, или позволяет всем нормально работать без видимых проблем, не определено. Это может быть так с одним компилятором, а с другим - с новой версией компилятора, с каждой новой компиляцией, с фазами луны, вашим настроением или в зависимости от числа или нейтрино, прошедших через процессор в последний солнечный день. после полудня. Или это не так.
Все это и бесконечное количество других возможностей заключены в один термин: Неопределенное поведение :
Просто держись от этого подальше.
Если вы знаете, как конкретная версия компилятора реализует свои функции, вы можете заставить это работать. Или нет. Или вы можете подумать, что это работает, но оно ломается, но только если тот, кто сидит перед компьютером, просто съел йогурт.
Есть ли какая-то причина, почему вы хотите, чтобы это сработало?
Я полагаю, что это работает / не работает так, как работает / не работает, потому что ваш компилятор создает записи виртуальной таблицы в порядке объявления виртуальных функций. Если вы испортили порядок, поместив виртуальную функцию между остальными, тогда, когда кто-то вызывает other1()
, вместо этого вызывается someFuncC()
, возможно, с неверными аргументами, но определенно в неправильный момент. (Радуйся, что он сразу падает.)
Это, однако, всего лишь предположение, и даже если оно верное, если ваша версия gcc не содержит документ, где-то описывающий это, нет гарантии, что он будет работать завтра даже с той же версией компилятора .