开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
问题(Question):
我的问题是下面程式码main()里的D=test(C)到底做了哪些事?目前
我大概知道的是因为有return by value,所以会呼叫复制建构子,
但最后到底是哪个物件呼叫解构子?我原本的理解是test()里的物件S
会复制一份给main的物件D,并且透过复制建构子指定物件D的x,y值。
之后这个复制出来的物件S因为生命周期结束呼叫解构子。但为什么从
输出结果来看似乎是物件D呼叫解构子??
结果(Output):
Coordinate(double cx, double cy) call
Coordinate() call
Coordinate(const Coordinate &) call
deconstructor call!
1,1
程式码(Code):(请善用置底文网页, 记得排版)
class Coordinate
{
public:
Coordinate();
Coordinate(const Coordinate & S);
Coordinate(double cx, double cy);
~Coordinate();
private:
double x;
double y;
};
Coordinate test(Coordinate & S);
int main()
{
Coordinate C(4,6);
Coordinate D;
D=test(C);
system("pause");
return 0;
}
Coordinate::Coordinate()
{
cout<<"Coordinate() call"<<endl;
x=0;
y=0;
}
Coordinate::Coordinate(const Coordinate & S)
{
cout<<"Coordinate(const Coordinate &) call"<<endl;
x=1;
y=1;
}
Coordinate::Coordinate(double cx, double cy)
{
cout<<"Coordinate(double cx, double cy) call"<<endl;
x=cx;
y=cy;
}
Coordinate::~Coordinate()
{
cout<<"deconstructor call!"<<endl;
cout<<x<<","<<y<<endl;
}
Coordinate test(Coordinate & S)
{
return S;
}