
#include<iostream>
using namespace std;
//构造函数:创建对象的时候,同时初始化资源
// 1.函数名和类名一样
// 2.没有返回值类型声明
// 3.构造函数是可以带参数的,所以可以重载
// 4.构造函数编译器会在创建对象时,自动调用
//析构函数:在对象死亡(生命周期结束)时,会自动调用
// 1.函数名和类名一样
// 2.没有返回值类型声明
// 3.析构函数不可以带参数,所以不可以重载
//注意: 1.先定义的先构造后析构
// 2.后定义的后构造先析构
// 可以类比堆栈
class Stu {
private:
int m_age;
char* m_name;
public:
Stu()//无参构造函数
{
m_age = 18;
m_name = new char[8];//动态内存分配,必须手动释放
strcpy(m_name, "Ynchen");
}
~Stu()//析构函数
{
if (m_name)
{
delete[]m_name;//用于释放被调用的堆空间
}
}
int getage(){
return m_age;
}
const char* getname() {
return m_name;
}
};
int main()
{
Stu Ynchen;
Stu vip[25];
for (int i = 0; i < 25; i++)
{
cout << vip[i].getage() << " " << vip[i].getname() << endl;
}
return 0;
}构造函数:确保对象在使用前被正确初始化,避免出现未定义状态。 析构函数:确保对象在不再使用时释放资源,防止资源泄露。
在现代编程语言中,如C#和Java,垃圾回收机制会自动管理内存,但析构函数(或类似的终结器/析构器)仍然用于释放非内存资源。在C++中,由于没有自动垃圾回收,构造函数和析构函数对于资源管理尤为重要。