VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 157|回复: 1

[已解决]想请问一下C++的new有没有类似realloc的功能

[复制链接]
11_avatar_middle
最佳答案
0 
在线会员 发表于 2020-6-21 18:49:46 | 显示全部楼层 |阅读模式
举个例子来说明吧
学习C语言数据结构的时候曾经学过顺序表,其定义和“插入”操作如下:
  1. #include <stdlib.h>
  2. #define LISTINITSIZE 100
  3. #define LISTINCREASEMENT 10

  4. typedef struct SqList{
  5.         ElemType *elem;
  6.         int length;
  7.         int listsize;
  8. }SqList;

  9. void listInsert_sq(SqList &L, int i, ElemType e)
  10. {
  11.         if (i < 1 || i > L.length + 1)
  12.         {
  13.                 printf("Invalid index!");
  14.                 exit(1);
  15.         }
  16.         if (L.length > L.listsize)
  17.         {
  18.                 ElemType* newbase;
  19.                 newbase = (ElemType*) realloc(L.elem, sizeof(ElemType) * (L.length + LISTINCREASEMENT));
  20.                 L.elem = newbase;
  21.                 L.listsize += LISTINCREASEMENT;
  22.         }
  23.         ElemType *p, *q;
  24.         q = L.elem + i - 1;
  25.         for (p = L.elem + L.length - 1; p >= q; p --) *(p + 1) = *p;
  26.         *q = e;
  27.         L.length ++;
  28. } // 在第i个位置插入元素
复制代码

在上例中,顺序表的最大长度可以动态地变化。如果添加元素的个数超过了最大长度,则调用realloc重新申请更大的内存。
现在我想将顺序表封装成C++里的类,定义如下
  1. #pragma once
  2. #include <string>
  3. using namespace std;

  4. const int INITLISTSIZE = 1000;

  5. class SqList
  6. {
  7. public:
  8.         int length;
  9. private:
  10.         string* data;
  11.         int size;

  12. public:
  13.         void initList();
  14.         void append(string s, int i);
  15. };

复制代码

想请问如果initList中是用new申请的内存,有没有方法申请更大内存呢?类似realloc
谢谢!!!!!!
最佳答案
57_avatar_small
2020-6-22 15:22:41
没有。如果一定要封装这样的接口你需要重新申请更大自由存储区,进行深拷贝。然后释放之前申请的自由存储区。




上一篇:html
下一篇:类内函数指针如何调用
57_avatar_middle
最佳答案
22 
在线会员 发表于 2020-6-22 15:22:41 | 显示全部楼层    本楼为最佳答案   
bestAnswer
没有。如果一定要封装这样的接口你需要重新申请更大自由存储区,进行深拷贝。然后释放之前申请的自由存储区。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-18 17:59

Powered by CcTry.CoM

© 2009-2020 cctry.com

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