在讲到new和delete不得不想到c语言中的malloc and free 以及其经常用于动态内存分配,而简单来说,动态内存分配在堆中,不会因为离开作用域而删除,而栈中存储的一般为函数参数,返回值以及作用域下的local orient.
那我们可想而知的是,在函数中如果我创建指针,肯定为了不浪费内存,我们选择动态分配内存的方式,那么就是利用C++中的new或者c中的malloc,我们需要养成一个良好的习惯就是记得释放内存不然会造成memory leak,想必大家经常听过这个词,那这里是为什么会造成内存泄漏,假设我们在一个作用域比如
{
char* p = new char[3];
}
此时我们创建了一个指向char型的指针p,但是p没有delete,这时候,一块在heap中创建的char数组依旧存在,而这个地址的别名p因为离开了作用域而无法访问,那么这块内存在整个操作系统中就是无法使用的部分。
所以在内存中,我们使用了new就得伴随着delete。
这时候我们知道p是一个local orient,那么我们还会有一种写法就是static,也就是静态对象或者说全局对象,这种对象在离开作用域时,是不会消失的,他会伴随着程序结束而终结。
{
static int a = 3;
}
那么说到这里,我们也会去想知道new到底是怎么工作的,从我的上一篇博客里,我们知道创建一个complex对象需要2个double也就是8个字节,这时候比如有下列的程序