在类中使用指针时,需要使用new分配它自己的空间。如:
Private: int* m_pAge;
Public:Cperson(){m_pAge =new int(100);}
new 或者 malloc后需要手动删除所使用空间,由此引入析构函数.
析构函数:回收对象在堆区分配的空间,类中有new就会有析构函数.对象生命周期结束,会自动调用析构函数.
析构:对象生命周期结束时,回收空间.其中对象包括:
① 部对象:生命周期是当前作用域结束.
② 全局对象:生命周期是程序结束.
③ 指针对象: CPerson* p=new CPerson;//new 堆区的生命周期,遇到delete时结束
④ 临时对象:CPerson(); //生命周期就是当前这一行
当函数返回对象时,会使用临时对象,如下所示:
CPerson QQ() { CPerson ps; Return ps;}
Int main(){
CPerson ps1;
ps1=QQ();
}
分析:在QQ()函数中,由于ps为局部对象,当return时会自动调用析构函数,将ps删除掉,为了防止该情况发生,所以引入了临时对象。
上述代码的输出结果为:构造函数、构造函数、析构函数、析构函数、析构函数。
注意:new和delete创建、删除对象时会触发构造函数和析构函数。
但malloc时需要自己手动添加构造和析构函数,它自己不会自动调用。
Private: int* m_pAge;
Public:Cperson(){m_pAge =new int(100);}
new 或者 malloc后需要手动删除所使用空间,由此引入析构函数.
析构函数:回收对象在堆区分配的空间,类中有new就会有析构函数.对象生命周期结束,会自动调用析构函数.
析构:对象生命周期结束时,回收空间.其中对象包括:
① 部对象:生命周期是当前作用域结束.
② 全局对象:生命周期是程序结束.
③ 指针对象: CPerson* p=new CPerson;//new 堆区的生命周期,遇到delete时结束
④ 临时对象:CPerson(); //生命周期就是当前这一行
当函数返回对象时,会使用临时对象,如下所示:
CPerson QQ() { CPerson ps; Return ps;}
Int main(){
CPerson ps1;
ps1=QQ();
}
分析:在QQ()函数中,由于ps为局部对象,当return时会自动调用析构函数,将ps删除掉,为了防止该情况发生,所以引入了临时对象。
上述代码的输出结果为:构造函数、构造函数、析构函数、析构函数、析构函数。
注意:new和delete创建、删除对象时会触发构造函数和析构函数。
但malloc时需要自己手动添加构造和析构函数,它自己不会自动调用。