new和 delete表达式
2010-12-12 15:30
357 查看
系统为每个程序都提供了一个在程序执行时可用的内存池。 这个可用内存池被称为程序 的空闲存储区( free store) 或堆 (heap), 运行时刻的内存分配被称为动态内存分配(dynamic memory allocation)。
动态内存分配由 new 表达式应用在一个类型指示符 specifier 上来完成,类型指示符可以是内置类型或用户定义类型,new 表达式返回指向新分配的对象的指针 。
例如
int *pi = new int;
从空闲存储区中分配了一个int型的对象,并用它的地址初始化 pi, 在空闲存储区内实际分配的对象并没有被初始化, 我们可以如下指定一个初始值 :
int *pi = new int( 1024 );
它不但分配了这个对象而且用1024 将其初始化。
要动态分配一个对象数组,我们可以写成:
int *pia = new int[ 10 ];
数组的元素没有被初始化,没有语法能为动态分配的数组的元素指定一个显式的初始值集 合, 在类对象数组的情况下 如果我们定义了缺省构造函数,那么它将被顺次应用在数组的每一个元素上,例如 :
string *ps = new string;
从空闲存储区分配了一个string类对象 并用它的地址初始化 ps 然后再在该对象上调用 string类缺省构造函数;
类似地 ,如下语句 :
string *psa = new string[ 10 ];
从空闲存储区分配了一个含有10个 string 类对象的数组,用它的地址初始化psa 然后依次在每个元素上调用string 类的缺省构造函数 。
当对象完成了使命时 我们必须显式地把对象的内存返还给空闲存储区 我们通过把delete 表达式应用在 指向我们用 new 表达式分配的对象指针上来做到这一点(delete 表达式不应该被应用在不是通过 new 表达式分配的指针上,delete也不能用于指向栈stack空间的指针上,例如:int a =1; int *p = new int; p=&a;delete p; //错误,此时p指向了a所在的stack的a),例如 :
delete pi;
释放了pi指向的int对象,将其返还给空闲存储区,类似地
delete ps;
在 ps 指向的 string类对象上应用 string 的析构函数后,释放其存储区并将其返还给空
闲存储区,最后
delete [] pia;
动态内存分配由 new 表达式应用在一个类型指示符 specifier 上来完成,类型指示符可以是内置类型或用户定义类型,new 表达式返回指向新分配的对象的指针 。
例如
int *pi = new int;
从空闲存储区中分配了一个int型的对象,并用它的地址初始化 pi, 在空闲存储区内实际分配的对象并没有被初始化, 我们可以如下指定一个初始值 :
int *pi = new int( 1024 );
它不但分配了这个对象而且用1024 将其初始化。
要动态分配一个对象数组,我们可以写成:
int *pia = new int[ 10 ];
数组的元素没有被初始化,没有语法能为动态分配的数组的元素指定一个显式的初始值集 合, 在类对象数组的情况下 如果我们定义了缺省构造函数,那么它将被顺次应用在数组的每一个元素上,例如 :
string *ps = new string;
从空闲存储区分配了一个string类对象 并用它的地址初始化 ps 然后再在该对象上调用 string类缺省构造函数;
类似地 ,如下语句 :
string *psa = new string[ 10 ];
从空闲存储区分配了一个含有10个 string 类对象的数组,用它的地址初始化psa 然后依次在每个元素上调用string 类的缺省构造函数 。
当对象完成了使命时 我们必须显式地把对象的内存返还给空闲存储区 我们通过把delete 表达式应用在 指向我们用 new 表达式分配的对象指针上来做到这一点(delete 表达式不应该被应用在不是通过 new 表达式分配的指针上,delete也不能用于指向栈stack空间的指针上,例如:int a =1; int *p = new int; p=&a;delete p; //错误,此时p指向了a所在的stack的a),例如 :
delete pi;
释放了pi指向的int对象,将其返还给空闲存储区,类似地
delete ps;
在 ps 指向的 string类对象上应用 string 的析构函数后,释放其存储区并将其返还给空
闲存储区,最后
delete [] pia;
相关文章推荐
- C++学习之new 与 delete表达式
- 第五章 表达式(part3) 复合表达式的求值、new 和 delete 表达式、类型转换
- new 和 delete 表达式(c++primer)
- C++ Primer 有感(new和delete表达式)
- new和delete表达式
- C++ Primer 有感(new和delete表达式)
- C++ Primer 有感(new和delete表达式)
- C++基础知识学习:new与delete表达式
- 细嚼慢咽C++primer(2)——表达式,sizeof,new,delete,类型转换
- new/delete /new表达式
- 细嚼慢咽C++primer(2)——表达式,sizeof,new,delete,类型转换
- new和delete表达式
- c++中优化内存分配:new/delete操作符;allocator类对象的使用;operator new/operator delete函数及定位new表达式
- 《C++ primer》——ch5 表达式:new和delete
- new 和 delete 表达式
- new and delete 表达式
- C++ 学习笔记(19)new/delete表达式、定位new、typeid、dynamic_cast、type_info、枚举类型、成员函数指针、union、位域、volatile限定符、链接指示
- 【C++】new和delete表达式与内存管理
- C++的new和delete表达式
- new/delete 和 malloc/free 的区别