c++类的指针问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 08:03:46
#include <iostream.h>
class Q
{
int x,y;
public:
Q(int a=0,int b=0)
{
x=a;y=b;cout<<x<<'\t'<<y<<'\n';
}

~Q()
{
cout<<"调用析构函数\n";
}
};
void main()
{
Q * pobj=new Q(500,1000);
Q x1(10,20);
x1=Q(30,60);
delete pobj;
cout<<"退出主函数!\n";
}
请问:在执行x1=Q(30,60);时会产生一个临时的对象,完成赋值后,立即撤销临时对象,那在执行指针的时候Q * pobj=new Q(500,1000);它会不会也产生一个临时变量因为Q(500,1000)和Q(30,60)是一样的??如果不是Q * pobj=new Q(500,1000);它是怎么执行的先算什么??请详细写清楚些???

new 函数的意思是在堆上分配一个存储空间给你的程序变量。那么这个Q(500,1000)是一个分配在堆上的Q类型的变量。然后返回该变量的地址。你用pobj来接受,然后得到这个对象。用new出来的东西一定要调用delete来删除该对象。不然会造成内存的泄漏。
但是你用那个赋值的形式,它确实会先去产生一个对象,但是是在栈上面操作的。然后用这个新产生的对象给你的x1赋值。这条语句过后会自动被清除掉。
但是用new出来的东西是不会被自动清除的。这一点需要特别注意。就想c里面提到的malloc一样,需要调用free来释放内存。