析构函数
- 析构函数:在类中声明的一种成员函数
①析构函数与类名同名
②析构函数无参(不可重载)
③表示:
~类名()
{
析构函数体;
}
-
调用:i:析构函数由系统自动调用
——释放一个对象时,系统将自动地为该对象调用析构函数
ii:目的:进行一些与该对象有关的销毁性工作
iii:用new分配的动态对象在释放时,系统要为该动态对象调用析构函数
-
局部对象:在函数内用类名定义的对象
全局对象:在函数外用类名定义的对象
i:局部对象在函数运行完成时要释放
全局对象在整个程序执行完成后释放
ii:全局对象在编译阶段即分配单元
对象的释放顺序严格与定义顺序相反(即析构函数的调用顺序严格与构造函数相反)
#include<iOStream>
using namespace std;
class Myclass{
public:
Myclass(){
cout<<"Myclass conts"<<endl;
}
~Myclass()
{
cout<<"Myclass Dels"<<endl;
}
};
Myclass myGlobal;
int main()
{
Myclass my1,my2;
Myclass *Pmy=new Myclass();
delete Pmy;
}
类内new在类内delete
#include<iostream>
using namespace std;
class Myclass{
private:
int *px;
public:
Myclass(){
px=new int(3);
}
void print()
{
cout<<*px<<endl;
}
~Myclass()
{
delete px;
}
};
int main()
{
Myclass my;
my.Print();
}
若在类中未定义析构函数,系统会自动生成一个空析构函数,以保证释放对象时可以调用
客户端new的对象,一定可以在客户端delete
#include<iostream>
using namespace std;
class Myclass{
private:
int *px;
public:
Myclass( int *t)
{
px=t;
}
void Print()
{
cout<<*px<<endl;
}
~Myclass()
{
delete px;
}
};
int main()
{
Myclass *pmy=new Myclass(new int(3));
pmy->Print();
delete pmy;
}
文章最后发布于: 2019-04-28 18:49:19
相关阅读
1.什么是析构函数 析构函数于构造函数相对应,构造函数是对象创建的时候自动调用的,而析构函数就是对象在销毁的时候自动调用的的
相信学习c++的很多同志都听过这样的建议:最好将类的析构函数写成虚函数,如下:class B { public: B() { printf("B()\n"); }
乍一看,java里面怎么还有这样的词语。其实:析构函数(destructor) 与 构造函数 相反,当对象结束其 生命周期时(例如对象所在的函数
通过C++ Primer重新回顾构造函数和析构函数,发现真的好多都忘了… 构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次