使用new和delete优点

很多人知道new和delete怎么用,却不知道为什么要用,这篇博客诣在用最少的语言介绍C++中使用new 和 delete的原因。


我们知道,平时创建小型数组时,声明数组即可。

但是,当函数将读入到一个大型临时数组时,声明数组可能会浪费内存。

比如,程序要读1000个字符串,其中大的字符串包含99个字符,大部分字符串都特别短。那么直接声明1000个长度为100的字符串数组,则会浪费大量的内存。


那么问题来了,我们如何解决浪费大量内存的问题呢?


哈哈,当然是使用new和delete啦。

使用  new[ ] 操作符创建数组时,将采用动态联编(动态数组),即将在运行时为数组分配空间,其长度也将在运行阶段设置,使用完动态数组之后,delete [ ] 将会释放被占用的内存。

          例 int  length;

              cin >> length;

              int  * pArray = new int [length + 1] ;

              ……

              delete [] pArray;

  (而使用数组声明来创建数组时,将采用静态联编,即数组的长度在编译阶段设定。 例  int  cheat [10] ; )


下面的源代码是根据C++ Primer 5 里面的一个例子编写,与书中例子大致是一样的。

#include <stdlib.h>
#include <iostream>
#include <math.h>
using namespace std;

char * getname();

int main()
{
	char * name;
    name = getname();
	cout << name <<endl;

	delete [] name;   //memory freed ,but the array are still there

	name = getname();
	cout << name <<endl;
	
	delete [] name;    //memory freed again

	
	system("pause");
	return 0;
}
char * getname()
{
	char temp[80];   //only one 
	cout << "Enter last name:";
	cin >> temp;
	char * p = new char [strlen(temp) + 1];
	strcpy(name, temp);
	
	return name;  
}

上面的程序中,函数getname(),只声明了一个长度为10的静态数组temp,用于暂存输入。

巧妙之处在于,当创建动态数组 *p时, 会根据输入到temp字符串的长度进行创建,避免浪费内存空间。

       strlen() 函数用于得到一个字符串的长度,   +1则是因为字符串必须以‘ \n ' (空字符)结尾,所以增加一个字符的空间用于存储空字符。

在main() 函数中,函数getname()的返回值(地址)被赋给name指针。该指针在main() 中定义,但指向getname()函数分配的内存块。

然后释放name指向的内存块后,main() 函数再次调用getname()函数。


getname()分配内存,而main()释放内存。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值