C++内存管理和模板

一、内存管理

关键字: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;

多类型:

通过强转可以确认类型再传到函数中,

或:

也可以达到一样的效果。

上一篇:基本结构


下一篇:Flume配置案例@Source:Kafka,Channel:File,Sink:HDFS