C++动态分配内存【转】
静态与动态内存分配的两个主要区别是:
1、静态对象是有名字的变量,我们直接对其进行操作。而动态对象是没有名字的变量,我们通过指针间接地对它进行操作。
2、静态对象的分配与释放由编译器自动处理。程序员需要理解这一点,但不需要做任何事情。相反,动态对象的分配与释放,
1、静态对象是有名字的变量,我们直接对其进行操作。而动态对象是没有名字的变量,我们通过指针间接地对它进行操作。
2、静态对象的分配与释放由编译器自动处理。程序员需要理解这一点,但不需要做任何事情。相反,动态对象的分配与释放,
必须由程序员显示地管理,相对来说比较 容易出错,它通过new和delete两个表达式来完成。
对象的动态分派可通过new表达式的两个版本之一来完成。第一个版本用于分配特定类型的单个对象
例如: int *pint = new int(1024);
表达式返回对象在内存中的地址。接着,这个地址被用来初始化指针对象pint。
new表达式的第二个版本,用于分配特定类型和位数的数组。
例如:int *pia=new int[4];
分配了一个含有四个整数元素的数组。不幸的是,我们没有办法给动态分配的数组的每个元素显式地指定一个初始值。
当用完了动态分配地对象或对象地数组时,我们必须显式地释放这些内存。我们可以通过使用delete表达式地两个版本之一来完成这件事情,
例如:删除单一对象
delete pint;
数组形式地delete表达式为:
delete [] pia;
如果忘记删除动态分配地内存,程序就会在结束时出现内存泄漏(memory leak)的问题。
对象的动态分派可通过new表达式的两个版本之一来完成。第一个版本用于分配特定类型的单个对象
例如: int *pint = new int(1024);
表达式返回对象在内存中的地址。接着,这个地址被用来初始化指针对象pint。
new表达式的第二个版本,用于分配特定类型和位数的数组。
例如:int *pia=new int[4];
分配了一个含有四个整数元素的数组。不幸的是,我们没有办法给动态分配的数组的每个元素显式地指定一个初始值。
当用完了动态分配地对象或对象地数组时,我们必须显式地释放这些内存。我们可以通过使用delete表达式地两个版本之一来完成这件事情,
例如:删除单一对象
delete pint;
数组形式地delete表达式为:
delete [] pia;
如果忘记删除动态分配地内存,程序就会在结束时出现内存泄漏(memory leak)的问题。