這裏的一些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*()
返回的指針可以以某種方式變得無效?