我编写了以下代码来进行测试:
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
能够工作呢?
这是未定义行为吗?是MSVS错了还是没问题的?