Вот некоторые 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
возвращается. Гарантировано ли это? Может ли указатель, возвращаемый operator double*()
, каким-то образом стать недействительным в вызове f
?