一个简单的问题,请问如何在C++中取代C中realloc操作的呢?(30分)

  • 主题发起人 主题发起人 Archerfl
  • 开始时间 开始时间
A

Archerfl

Unregistered / Unconfirmed
GUEST, unregistred user!
在C语言中
int *p;
p = (int *)malloc(3 * sizeof(int));
这样,我们就动态定义了一个存放3个元素的一维数组。
然后,我们向其中存数
p[0] = 10;
p[1] = 20;
p[2] = 30;
当我们感觉该数组不够大时,又可以用
p = (int *)realloc(p,5 * sizeof(int));来进行扩展,而且这时前面存放的3个元素的
数据不会被清除。
而在C++中,当我用
int *p;
p = new int[3];
p[0] = 10;
p[1] = 20;
p[2] = 30;
后,如何再将该数组扩展为5个元素,且使前3个元素的值不被清除呢?在C++中是用什么
去取代C中的realloc的操作的呢?
 
还是realloc
因为realloc是函数,非操作!它不是C,也不C++的运算符!
要么不用realloc,要么不用new!
 
不太清楚你的意图,如果你是想定义一个可变数组的话,可以用STL的VECTOR,如果你的工具是BCB,还可以使用动态数组
 
to kerbcurb:
我的意思就是如何定义一个动态数组,可以随时增加数组的大小,而且还要保留前面存
入数组中的数据不变!请问如何实现?
 
kerbcurb说的是对的,在C++中,不推荐使用realloc,也不推荐使用动态数组,
应该使用STL中的容器来达到你的要求,后者是内存自管理的。
当然你一定要用realloc也可以,因为C++是兼容C的,但那不是C++的风格。
这是Bjarne Stroustrup的FAQ中的一段:
为什么C++中没有相当于realloc()的函数?

如果你需要,你当然可以使用realloc()。但是,realloc()仅仅保证能工作于
这样的数组之上:它们被malloc()(或者类似的函数)分配,包含一些没有用
户定义的复制构造函数(copy constructors)的对象。而且,要记住,与通
常的期望相反,realloc()有时也必须复制它的参数数组。

在C++中,处理内存重新分配的更好的方法是,使用标准库中的容器,例如vector,
并让它自我增长。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部