构造函数 和 new 运算符结合使用
指针变量 = new 类型(常量)
指针变量 = new 类型(表达式)
int main()
{
Test t; //在这里就调用了不带参数的构造函数
t.Display();
Test t1(10); //这是调用了带参数的构造函数
t1.Display();
Test* t3 = new Test(20); // new运算符不但开辟了空间并且调用构造函数
t3->Display();
delete t3; //这里是将开辟的空间销毁 防止内存泄漏
return 0;
}
析构函数 和 delete运算符的结合使用
1.析构函数 不允许 重载,也就是说他不能有参数
2.在使用delete销毁 类的空间的时候 会调用析构函数
3.没有定义析构函数 编译器会自动定义一个空的析构函数
delete 指针变量 //销毁一个
delete []指针变量 //销毁数组
int main()
{
Test* t3 = new Test(20); // new运算符不但开辟了空间并且调用构造函数
t3->Display();
delete t3;
Test* t4 = new Test(40); // new运算符不但开辟了空间并且调用构造函数
t4->Display();
delete t4;
Test t; //在这里就调用了构造函数
t.Display();
Test t1(10); //这是调用了带参数的构造函数
t1.Display();
return 0;
}
在这段程序中 有Test类的四个对象,t3和t4是程序员自己开辟空间的用的是堆空间。
使用完以后通过delete运算符销毁了空间,
在销毁空间的是时候调用了析构函数所以析构函数销毁空间的顺序是正向的,
即先销毁t3 然后是销毁的是t4。
而 t和t1是用 的栈空间(先进后出),
在main函数结束之后系统销毁了空间,
顺序是反向的即 先销毁t1接着销毁t。
析构函数 和 数组 的关系
这里基本没有什么大的特殊点 只要牢记 new Test() 是创建一个且赋值
new Test[] 是创建多个且不赋值并且销毁空间的时候 delete []p