您的位置:首页 > 其它

指针和自由存储空间复习(重点复习new和delete)

2017-05-29 16:59 288 查看

指针和自由存储空间复习(重点复习new和delete)

使用new来分配内存

在运行阶段分配未命名的内存以存储值

为一个数据对象(可以是结构,也可以是基本类型)获得并指定分配内存的通用格式如下:
typeName * pointer_name = new typeName;


需要在两个地方指定数据类型:用来指定需要什么样的内存和用来声明合适的指针。

使用delete释放内存

一定要配对地使用new和delete

使用delete时,后面要加上(最初是由new分配的)指向内存块的指针。

int* ps=new int;
...
delete ps;


这将释放ps指向的内存,但不会删除指针ps本身。(可将ps重新指向另一个新分配的内存块)

使用new来创建动态数组

将数组的
元素类型
元素数目
告诉new即可。


int* psome=new int [10];//创建一个包含10个int元素的数组


new运算符返回第一个元素的地址

当程序使用完new分配的内存块时,应使用delete释放它们。(如果使用new时不带方括号,使用delete时也不带方括号;如果使用new时带方括号,使用delete时也带方括号)

delete [] psome;


使用new和delete时,应遵循以下规则:

·不要使用delete来释放不是new分配的内存

·不要使用delete释放同一个内存块两次

·如果使用new[]为数组分配内存,则应使用delete[]来释放

·如果使用new为一个实体分配内存,则应使用delete(没有方括号)来释放

·对空指针应用delete是安全的

使用动态数组

把指针当作数组名使用即可

//arraynew.cpp
#include <iostream>
int main()
{
using namespace std;
double* p3=new double [3];
p3[0]=0.2;
p3[1]=0.5;
p3[2]=0.8;
cout<<"p3[1] is "<<p3[1]<<".\n";
p3=p3+1;//使p3指向第2个元素而非第1个元素
cout<<"now p3[0] is "<<p3[0]<<",p3[1] is "<<p3[1]<<".\n";
p3=p3-1;
delete []p3;
return 0;
}


使用new创建动态结构

创建结构:

structName * pointer_name = new structName;


例如
inflatable * ps = new inflatable;


访问成员:

因为动态创建的结构没有名称,所以不能使用成员运算符句点
.


一种访问结构成员的方法是使用而箭头成员运算符
->
。(
ps->price
)

另一种访问结构成员的方法是
(*ps).price


一个使用new和delete的示例

定义一个函数
getname()
,该函数返回一个指向输入字符串的指针。该函数将输入读入到一个大型的临时数组中,然后使用
new[]
创建一个刚好能够存储该输入字符串的内存块,并返回一个指向该内存块的指针。


//delete.cpp
#include <iostream>
#include <string.h>//or csting
using namespace std;
char* getname(void);//function prototype

int main()
{
char *name;//create pointer but no storage
name=getname();//assign adress of string to name
cout<<name<<" at "<<(int*)name<<"\n";
delete []name;//memory freed

name=getname();//reuse freed memory
cout<<name<<" at "<<(int*)name<<"\n";
delete []name;
return 0;
}

char* getname()
{
char temp[100];//temporary storage
cout<<"Enter name:";
cin>>temp;
char* pn=new char[strlen(temp)+1];
strcpy(pn,temp);//copy string into smaller space
return pn;
}


注意该程序中将new和delete分开放在不同的函数中,此行为不推荐。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  指针 new delete
相关文章推荐