c++类的构造函数

来源:百度知道 编辑:UC知道 时间:2024/05/15 12:09:10
#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';
cout<<"调用构造函数";
}

~Q()
{
cout<<"调用析构函数\n";
}
};
void main()
{
Q * pobj=new Q(500,1000);

delete pobj;

}
请问:为什么会输出“调用构造函数”和”调用析构函数“,如果说执行了 Q * pobj=new Q(500,1000);这个中的Q(500,1000);但是少了个对象,对象呢?

new Q(500,1000);
这个语句是指在堆上划分一片内存,创建一个临时的Q类的对象,并且以参数500,1000初始化,也就是调用Q类的构造函数。这和C语言中的malloc是不同的,malloc只分配内存但不调用构造函数。
同样delete pobj;先调用Q的析构函数析构对象pobj,然后再将堆上pobj对象所占的内存交还给系统。

“这个中的Q(500,1000);但是少了个对象,对象呢?” 这什么意思啊?
new Q(500,1000); //调用构造函数
delete pobj; //调用析构函数

问题症结在这里:
当一个类的对象被创建的时候,自动调用构造函数;
当一个雷的对象被释放的时候,自动调用析构函数;

Q *pobj = new Q(500, 1000); 这个过程执行了构造函数
delete pobj; 这个过程执行了析构函数