Re[7]: Правомерно ли такое
От: T4r4sB Россия  
Дата: 18.08.20 16:33
Оценка:
Здравствуйте, rg45, Вы писали:

R>Так это и есть битая ссылка, раз объект мертвый.


Скажем так, ссылка ведёт на объект, находящийся на стеке в вызывающей функции. То есть формально она не битая. И если бы у объекта не было деструктора, то ссылка бы вообще делала вид, что всё ништяк.

R>Попробуй использовать, например, std::string вместо int — спецэффекты будут поинтереснее.


Да то же самое примерно
; Function Attrs: noinline nounwind optnone uwtable
define linkonce_odr dso_local dereferenceable(32) %struct.IntWrapper* @"??$test@UIntWrapper@@@@YAAEAUIntWrapper@@$$QEAU0@@Z"(%struct.IntWrapper* dereferenceable(32) %0) #1 comdat {
  %2 = alloca %struct.IntWrapper*, align 8
  store %struct.IntWrapper* %0, %struct.IntWrapper** %2, align 8
  %3 = load %struct.IntWrapper*, %struct.IntWrapper** %2, align 8
  ret %struct.IntWrapper* %3
}

То есть ссылка возвращается нормальная. Дальше по коду строка разрушается сразу после вызова этой функции, если вывести что-то на экран, то выводится пустая строка.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.