C++使用new和delete的示例

      下面介绍一个使用new和delete来存储通过键盘输入的字符串的示例。程序定义了一个函数getname( ),该函数返回一个指向输入字符串的指针。该函数将输入读入到一个大型的临时数组中,然后使用new [ ]创建一个刚好能够存储该输入字符串的内存块,并返回一个指向该内存块的指针。对于读取大量字符串的程序,这种方法可以节省大量内存(实际编写程序时,使用string类将更容易,因为这样可以使用内置的new和delete)。
      假设程序要读取1000个字符串,其中最大的字符串包含79个字符,而大多数字符串都短得多。如果用char数组来存储这些字符串,则需要1000个数组,其中每个数组的长度为80个字符。这总共需要80000个字节,而其中的很多内存没有被使用。另一种方法是,创建一个数组,它包含1000个指向char的指针,然后使用new根据每个字符串的需要分配相应数量的内存。这将节省几万个字节。是根据输入来分配内存,而不是为每个字符串使用一个大型数组。另外,还可以使用new根据需要的指针数量来分配空间。就目前而言,这有点不切实际,就算用1000个指针的数组也是这样,不过程序还是演示了一些技巧。另外,为演示delete是如何工作的,该程序还用它来释放内存以便能够重新使用。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p6t6L-c,size_20,color_FFFFFF,t_70,g_se,x_16

 下面是该程序的运行情况:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5p6t6L-c,size_18,color_FFFFFF,t_70,g_se,x_16

程序说明

       程序中的函数getname( )。它使用cin将输入的单词放到temp数组中,然后使用new分配新内存,以存储该单词。程序需要strle("temp")+ 1个字符(包括空字符)来存储该字符串,因此将这个值提供给new。获得空间后,getname( )使用标准库函数strcpy( )将temp中的字符串复制到新的内存块中。该函数并不检查内存块是否能够容纳字符串,但getname( )通过使用new请求合适的字节数来完成了这样的工作。最后,函数返回pn,这是字符串副本的地址。
        在main( )中,返回值(地址)被赋给指针name。该指针是在main( )中定义的,但它指向getname( )函数中分配的内存块。然后,程序打印该字符串及其地址。
       接下来,在释放name指向的内存块后,main( )再次调用getname( )。C++不保证新释放的内存就是下一次使用new时选择的内存,从程序运行结果可知,确实不是。
       在这个例子中,getname( )分配内存,而main( )释放内存。将new和delete放在不同的函数中通常并不是个好办法,因为这样很容易忘记使用delete。不过这个例子确实把new和delete分开放置了,只是为了说明这样做也是可以的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小枭码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值