一、 在c++中,对象可以静态分配——即编译器在处理程序源代码时分配,也可以动态分配——即程序执行时调用运行时刻库函数来分配。
静态与动态内存分配的两个主要区别是:
1、静态对象是有名字的变量,我们直接对其进行操作。而动态对象是没有名字的变量,我们通过指针间接的对它进行操作。
2、静态对象的分配和释放由编译器自动处理,程序员不需要做任何事情。相反,动态对象的分配与释放,必须由程序员显示的管理,通过new和delete两个表达式完成。
关于第一句话,如何理解呢? 编译器怎么可能在编译时就分配内存?
二、对象的动态分配可以通过new表达式的两个版本之一来完成。
第一个版本用于分配特定类型的单个对象。例如:
int *pint = new int(1024);
分配一个没有名字的int类型的对象,初始值为1024,然后返回对象在内存中的地址,并用这个地址初始化指 针对象pint。对于动态分配的内存,唯一的访问方式是通过指针间接访问。
第二个版本是用户分配特定类型和维数的数组。例如:
int *pia = new int [4];
分配一个含有四个整数元素的数组。不幸的是,我们没有办法给动态分配的数组的每个元素显示的制定一个初始值。
分配动态数组返回值只是一个指针,与分配单一动态对象的返回类型相同。例如,pint和pia的不同之处在于,pia拥有四元素数组的第一个元素的地址,而pint只是简单的包含单一对象的地址。
可以通过delete的两个版本释放内存。
单一对象的delete表达式如下:
delete pint;
数组形式的delete表达式如下:
delete [] pia;