这里的一些C++代码:此代码行为是否定义良好?
#include <iostream>
class A
{
int x;
int y;
double v;
public:
A(int x, int y)
:x(x),y(y)
{
std::cerr << "A("<<x<<","<<y<<")\n";
}
~A()
{
std::cerr << "~A()\n";
}
operator double*()
{
v=1.5*x+y;
return &v;
}
};
void f(double* val)
{
std::cerr << "f("<<*val<<")\n";
*val=0.3;
}
int main()
{
f(A(3,5));
}
我得到以下的输出:
即,A(3,5)
F(9.5)
〜A()
也就是说因为我希望它能工作。但我不确定在f
返回后是否必须调用A
的析构函数。它有保证吗?在f
的电话中,operator double*()
返回的指针可以以某种方式变得无效?