知名网站建设商家,苏州互联网公司集中在哪里,绍兴做团购的网站,南京量身营销型网站设计9.3 析构函数
9.3.1 如何定义析构函数 函数名和类名称相同#xff0c;在函数名前加 ~ #xff0c;没有返回值类型#xff0c;没有函数形参。 (不能被重载)
当对象生命周期结束的时候#xff0c;系统自动调用析构函数#xff08;析构函数会先清理对象占用内存空间存放的…9.3 析构函数
9.3.1 如何定义析构函数 函数名和类名称相同在函数名前加 ~ 没有返回值类型没有函数形参。 (不能被重载)
当对象生命周期结束的时候系统自动调用析构函数析构函数会先清理对象占用内存空间存放的内容最后释放该对象的空间
先调用析构函数再释放对象的空间。 看下面这个顺序进行释放{} 代表一个生命周期或者说作用域。
对象在生命周期结束就会消亡。
消亡顺序整体从上往下逐个构造释放的时候出作用域最先消亡从下往上开始释放。同级的同作用域的按照栈的顺序从下往上释放。 栈先进后出最早出现的进入栈底下最后出现的进入到栈顶部想象成井水。栈是一种存储的数结构存储在里面的数据按照这个顺序进行压栈弹栈。后面会专门更一下常见数据结构感兴趣的小伙伴也可以去找一些视频观看。
一般情况下空的析构函数就足够。但是如果一个类有指针成员这个类必须写析构函数释放指针成员所指向空间。 内存泄漏问题是比较常见的问题并且也是很严重的污染内存空间的行为所以使用指针要记得释放申请堆区空间要记得释放。 代码 #include string.h
#include iostreamusing namespace std;class Data2{
public:char * name;
public://无参构造函数Data2(){name nullptr;cout 无参构造函数 endl;}//有参构造函数Data2(const char * str){name new char[strlen(str) 1];strcpy_s(name, strlen(str) 1, str);cout 有参构造函数 endl;}~Data2(){//析构函数if(name ! nullptr){delete [] name;}cout 析构函数 endl;};
};
void test02(){Data2 da1(Hellow);coutda1.nameendl;
}
int main()
{test02();return 0;
}