设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
C\C++
›
C++: new 出来的内存怎么改变大小?
1
2
/ 2 页
下一页
返回列表
查看:
2624
|
回复:
11
C++: new 出来的内存怎么改变大小?
[复制链接]
viper
viper
当前离线
积分
443
IP卡
狗仔卡
发表于 2003-5-29 02:01:30
|
显示全部楼层
|
阅读模式
用 C 的话可以使用 realloc() 来改变已经分配的内存快的大小:
#include <stdlib.h>
typedef struct tagSomething
{
int id;
} Something;
main()
{
Something *sth = malloc(sizeof(Something)*5);
if (sth == NULL)
return 1;
Something *newsth = realloc(sth, sizeof(Something)*10);
if (newsth != NULL) {
sth = newsth;
}
free(sth);
return 0;
}
复制代码
到了 C++ 里要用 new 来分配内存。假如
Object* objects = new Object[5];
复制代码
以后,想要把 objects 大小变成 10,就没有一个 re-new 来用了,
难道只能象下面这样先分配一段新的,在释放那段旧的么?
class Object
{
int id;
};
int
main()
{
Object* objs = new Object [5];
Object* new_objs = new Object[10];
delete [] objs;
objs = new_objs;
delete [] objs;
return 0;
}
复制代码
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
libinary
libinary
当前离线
积分
1502
IP卡
狗仔卡
发表于 2003-5-29 02:38:12
|
显示全部楼层
要改变大小就用容器,不要用指针
回复
支持
反对
使用道具
举报
显身卡
viper
viper
当前离线
积分
443
IP卡
狗仔卡
楼主
|
发表于 2003-5-29 03:28:08
|
显示全部楼层
用容器的话,就比我这么 new 一个新的然后 delete 旧的更加复杂了啊。
回复
支持
反对
使用道具
举报
显身卡
khj99
khj99
当前离线
积分
113
IP卡
狗仔卡
发表于 2003-5-29 07:31:51
|
显示全部楼层
容器好用啊。以前不熟的时候老是觉得自已写算法更简单,其实并不是这样的。现在熟了,发现真是好用啊。
回复
支持
反对
使用道具
举报
显身卡
libinary
libinary
当前离线
积分
1502
IP卡
狗仔卡
发表于 2003-5-29 14:07:24
|
显示全部楼层
容器要添加新元素就直接加了,用不着重新分配。
回复
支持
反对
使用道具
举报
显身卡
无双
无双
当前离线
积分
1799
IP卡
狗仔卡
发表于 2003-5-29 19:07:08
|
显示全部楼层
使用容器的话由容器管理内存
如
string s;
s = "111111111111111111111111111";
s = "22222222222222222222222222222222222222222222222222222222222222222222222222222222222";
就是放再长的串也可以保存
不用自己管理
如果想了解更深那么可以看看STL的资料
回复
支持
反对
使用道具
举报
显身卡
viper
viper
当前离线
积分
443
IP卡
狗仔卡
楼主
|
发表于 2003-5-29 22:20:51
|
显示全部楼层
我是打算做一个 StringBuffer 这样的类,在这个类内部的 buffer 大小随着数据量的增加而改变。这样的地方对于内部数据类型来说直接用 realloc() 也没有什么,但是如果 StringBuffer 包涵的字符是我自己的 UnicodeChar 那看起来就不太舒服。
STL 里面 string 的定义太长乐,是
std::basic_string<char, std::char_traits<char>, std::allocator<char>>
吧?看一遍胜读十本书。。。。
回复
支持
反对
使用道具
举报
显身卡
无双
无双
当前离线
积分
1799
IP卡
狗仔卡
发表于 2003-5-30 21:12:24
|
显示全部楼层
不用啊
直接写string就可以了
另外如果是unicode的话可以试用
basic_string<wchar_t> 你的对象看看
回复
支持
反对
使用道具
举报
显身卡
viper
viper
当前离线
积分
443
IP卡
狗仔卡
楼主
|
发表于 2003-5-30 22:36:33
|
显示全部楼层
先谢过斑竹和各位兄弟。
大家觉得那一本STL的书比较好?
回复
支持
反对
使用道具
举报
显身卡
无双
无双
当前离线
积分
1799
IP卡
狗仔卡
发表于 2003-5-31 12:33:11
|
显示全部楼层
有一本叫STL标准库还是C++标准库的
深蓝皮的的很厚的
写得还可以
把STL里面所有的容器都写出来了
还有就是SGI的STL帮助和GOOGLE
我觉得最好了
回复
支持
反对
使用道具
举报
显身卡
下一页 »
1
2
/ 2 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表