Я написал следующий код, чтобы проверить это:
struct X
{
char* x;
X()
{
x = new char('a');
}
~X()
{
*x = 'b';
delete x;
}
};
void foo(const X& x)
{
}
void goo(X& x)
{
}
int main()
{
foo(X());
goo(X());
}
Деструкторы для временных объектов вызываются после выхода из обеих функций, но я думал, что вы можете привязать временный объект только к ссылка const
. Почему тогда goo
работает?
UB и MSVS неверны или все в порядке?