一、内存管理
关键字:new delete
我们知道,在C语言中内存的开辟和修改,要用到函数malloc/calloc等,而且要直自己判断内存开辟是否正确,所以在C++中,提供了两函数:new/delete
由于malloc无法很好的支持动态内存申请的自定义对象初始化,new/delete可以看作专门用来初始化自定义对象的关键字。
用new开辟自定义对象空间时,会调用自定义对象的构造函数并开空间
用delete释放自定义对象空间时,会自动调用自定义对象的析构函数并释放空间
对于多个对象则会调用多次构造析构函数。
在给自定义类型初始化时,我们可以用到匿名对象的方式,也可以用隐式类型转换:
new失败后不会返回空,而死直接抱 异常,跳到catch函数中,如果没有实现catch函数则代码直接中止运行。其跳转方式和c中的goto很像。
在自定义类型中,new了之后要记得delete[],delete会在释放空间的时候连续调用析构来释放自定义类型中的内存,避免了内存泄漏。 自定义类型才会调用析构,指针属于内置类型,不会调用析构,而在定义p1时是指针,所以一定要配对使用,避免出错。
delete加不加阔哈的区别:
通常情况下,析构函数可以显示调用,构造函数不可以
但是我们可以通过定位new:
可以直接显示调用构造函数,在以后的内存池中有用。
二、模板
泛型编程
关键字:template /typename/class
函数模板每次用完一个函数后面得函数就不能用了:
在写各种Swap时内部逻辑相同,只是类型不一样时可以用到:
对stack:
stack<int>st1;
stack<double>st2;
多类型:
通过强转可以确认类型再传到函数中,
或:
也可以达到一样的效果。