c++利用构造函数和析构函数实现了对象所占内存的初始化和清空操作。对象的初始化和清除操作时强制执行构造函数和析构函数,如果没有自己实现,编译器提供默认构造函数和析构函数。
构造函数作用于对象初始化,主要作用在创建对象时为对象的成员变量赋值,构造函数由编译器自动调用,不需要手动调用,当我们使用new时,会先使用malloc申请一块堆区空间,然后调用构造函数为申请的空间赋值。
析构函数作用于对象销毁工作,清空对象所占有的堆区内存
注意:c++的一切操作都是在内存上的操作
构造函数
- 在创建对象时自动调用,申请空间为成员变量赋值
- 可以重载
- 与类同名
- 没有返回值
- 如果没有实现构造函数,编译器会有一个默认的无参构造函数
- 实例化对象
析构函数
- 析构函数(~ 类名(){ })没有返回值
- 函数名称与类名相同,但前面要有~
- 析构函数没有参数,不可重载(构造函数可以重载)
- 在对象被销毁之前自动调用析构函数(构造函数在创建对象时自动调用)
#include<iostream>
#include<string>
#include<Windows.h>
using namespace std;
class people {
public:
people() {
cout << "调用无参构造函数" << endl;
}
people(int a) {
cout << "调用一个参数构造函数" << endl;
}
people(int a, int b) {
cout << "调用两个参数构造函数" << endl;
}
~people() {
cout << "调用析构函数" << endl;
}
};
int main() {
people p;//在栈区创建对象
people *p1 = new people();//new在堆区创建对象
people *p2 = new people(3);
people *p3 = new people[2];//创建数组
delete p1;//delete用于销毁new创建的空间
delete p2;
delete[]p3;//析构数组时,不delete会报错,准确来讲是有析构函数的数组必须delete[]
system("pause");
return 0;
}