C++的动态内存创建由,new 和delete运算符支持。
一般来说,编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存全局变量和静态变量,栈存储调用函数相关的变量、地址等,堆存储动态生成的变量,在c中是指由malloc,free运算产生释放的存储空间,在c++中就是指new和delete运算符作用的存储区域。
动态创建对象时,如Object *x = new Obiject;首先编译器为利用new运算符为x对象分配内存,再调用Object类的构造函数,对存储区域进行初始化。语句返回对象的内存地址,即一个Object类的指针。如果内存不足,分配失败的话,就会返回一个0,并且不会调用Object 的构造函数,此时x=0;
可以对全局和类内部的new 和delete方法进行重载,以完成做要的功能。
还可以定位new 和delete,使其在指定的内存地址为对象分配空间。
【注】delete 只能删除new 生成的对象,并且delete 不能作用于void *的指针,因为类型未定,无法调用其,析构函数,有可能会造成内存泄漏。
转载于:https://blog.51cto.com/whithin/144892