[问题] copy constructor和deconstructor的问题

楼主: sam210125 (逐风)   2015-04-09 16:36:57
开发平台(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;
}
作者: BlazarArc (Midnight Sun)   2015-04-09 16:50:00
解构的是S啊,CD不是要等出main scope才会解构吗
楼主: sam210125 (逐风)   2015-04-09 16:53:00
那S的x y是不是因为复制建构子变成了1,1?
作者: shadow0326 (非议)   2015-04-09 18:32:00
解构的是test(C)这个rvalue
作者: Caesar08 (Caesar)   2015-04-09 19:55:00
你指的S是return的S,还是parameter?如果是前者,是。如果是后者,不是
作者: holydc (のヮの)   2015-04-10 04:29:00
你可以在constructor跟destructor印this的值会更清楚
楼主: sam210125 (逐风)   2015-04-10 09:21:00
有了 解构的是return的S没错 谢谢各位

Links booklink

Contact Us: admin [ a t ] ucptt.com