C++基础知识(析构函数)
程序员文章站
2024-03-26 11:20:11
...
析构函数的特点:
在空间释放时自动调用;
析构函数没有重载;
无参数;
没有重载;
有默认的析构函数,类比于构造函数;
1、局部对象(栈区,会自动调用析构函数)
#include<iostream>
using namespace std;
class CStu
{
public:
int nAge;
CStu()
{
nAge = 12;
cout << "构造函数" << endl;
}
~CStu()
{
cout << "析构函数" << endl;
}
};
int main(void)
{
CStu stu;
system("pause");
return 0;
}
2、指针对象(堆区,不会自动释放==》不会自动调用析构,需手动释放,用delete)
#include<iostream>
using namespace std;
class CStu
{
public:
int nAge;
CStu()
{
nAge = 12;
cout << "构造函数" << endl;
}
~CStu()
{
cout << "析构函数" << endl;
}
};
int main(void)
{
//CStu stu;
CStu* stu = new CStu;
delete stu;
system("pause");
return 0;
}
3、临时对象(作用域:所在语句)
#include<iostream>
using namespace std;
class CStu
{
public:
int nAge;
CStu()
{
nAge = 12;
cout << "构造函数1" << endl;
}
CStu(int i)
{
nAge = 12;
cout << "构造函数2" << endl;
}
~CStu()
{
cout << "析构函数" << endl;
}
};
int main(void)
{
//CStu stu;
//CStu* stu = new CStu;
//delete stu;
CStu(12); //CStu tu(12)临时对象:作用域所在语句,执行完该语句之后被释放
int b = 12;
int c = int(12);//临时变量
system("pause");
return 0;
}
malloc和new的区别 :malloc会触发构造函数,而new不会。
delete和free的区别:delete会触发析构函数,而free不会