读书人

关于析构函数的一个有关问题

发布时间: 2012-02-24 16:30:39 作者: rapoo

关于析构函数的一个问题
此程序最后居然输出三次 "析构 "字符串?
真是费解,拜托大家!
#include <iostream>
using namespace std;
class point
{
public:
point(int xx,int yy){x=xx,y=yy;}
point(point &p);
~point(){cout < < "析构 " < <endl;}
private:
int x;
int y;
};
point::point(point &p)
{
x=p.x;
y=p.y;
}
point fun2()
{
point A(1,2);
return A;
}
int main()
{
point B(4,5);
B=fun2();
return 0;
}


[解决办法]
point fun2()
{
point A(1,2); //1.函数返回,返回A的一个拷贝, 调用A的析构函数,
return A;
}
int main()
{
point B(4,5);
B=fun2(); //2. 函数返回的临时对象A被副给B, 然后析构
return 0; //3. 程序推出, B析构

[解决办法]
More Effective C++ item19
[解决办法]
有一个临时对象产生要析构
[解决办法]
你可能就对B=fun2();这里有疑惑
有三种调用拷贝构造函数
赋值 传参(对象值传递) 返回一个对象

[解决办法]
point fun2()
{
point A(1,2);
return A;
}

这个函数返回的时候,
return A; 不是直接将A拷贝给接受对象,
而是通过一个 临时对象 中转,
先把 A 拷贝给临时对象,然后再把临时对象拷贝给接受对象B ...

所以,
这个临时对象的析构 ...

读书人网 >C++

热点推荐