LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2623|回复: 11

C++: new 出来的内存怎么改变大小?

[复制链接]
发表于 2003-5-29 02:01:30 | 显示全部楼层 |阅读模式
用 C 的话可以使用 realloc() 来改变已经分配的内存快的大小:


  1. #include <stdlib.h>

  2. typedef struct tagSomething
  3. {
  4.                 int id;
  5. } Something;

  6. main()
  7. {
  8.         Something *sth = malloc(sizeof(Something)*5);
  9.         if (sth == NULL)
  10.                 return 1;

  11.         Something *newsth = realloc(sth, sizeof(Something)*10);
  12.         if (newsth != NULL) {
  13.                 sth = newsth;
  14.         }

  15.         free(sth);
  16.         return 0;
  17. }

复制代码


到了 C++ 里要用 new 来分配内存。假如

  1.    Object* objects = new Object[5];
复制代码

以后,想要把 objects 大小变成 10,就没有一个 re-new 来用了,
难道只能象下面这样先分配一段新的,在释放那段旧的么?

  1. class Object
  2. {
  3.         int id;
  4. };

  5. int
  6. main()
  7. {
  8.         Object* objs = new Object [5];

  9.         Object* new_objs = new Object[10];
  10.         delete [] objs;
  11.         objs = new_objs;

  12.         delete [] objs;
  13.         return 0;
  14. }
复制代码
发表于 2003-5-29 02:38:12 | 显示全部楼层
要改变大小就用容器,不要用指针
 楼主| 发表于 2003-5-29 03:28:08 | 显示全部楼层
用容器的话,就比我这么 new 一个新的然后 delete 旧的更加复杂了啊。
发表于 2003-5-29 07:31:51 | 显示全部楼层
容器好用啊。以前不熟的时候老是觉得自已写算法更简单,其实并不是这样的。现在熟了,发现真是好用啊。
发表于 2003-5-29 14:07:24 | 显示全部楼层
容器要添加新元素就直接加了,用不着重新分配。
发表于 2003-5-29 19:07:08 | 显示全部楼层
使用容器的话由容器管理内存

string s;
s = "111111111111111111111111111";
s = "22222222222222222222222222222222222222222222222222222222222222222222222222222222222";
就是放再长的串也可以保存
不用自己管理
如果想了解更深那么可以看看STL的资料
 楼主| 发表于 2003-5-29 22:20:51 | 显示全部楼层
我是打算做一个 StringBuffer 这样的类,在这个类内部的 buffer 大小随着数据量的增加而改变。这样的地方对于内部数据类型来说直接用 realloc() 也没有什么,但是如果 StringBuffer 包涵的字符是我自己的 UnicodeChar 那看起来就不太舒服。

STL 里面 string 的定义太长乐,是
std::basic_string<char, std::char_traits<char>, std::allocator<char>>
吧?看一遍胜读十本书。。。。
发表于 2003-5-30 21:12:24 | 显示全部楼层
不用啊
直接写string就可以了

另外如果是unicode的话可以试用
basic_string<wchar_t>  你的对象看看
 楼主| 发表于 2003-5-30 22:36:33 | 显示全部楼层
先谢过斑竹和各位兄弟。
大家觉得那一本STL的书比较好?
发表于 2003-5-31 12:33:11 | 显示全部楼层
有一本叫STL标准库还是C++标准库的
深蓝皮的的很厚的

写得还可以
把STL里面所有的容器都写出来了

还有就是SGI的STL帮助和GOOGLE
我觉得最好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表