自己写的一个c++管理buffer
2013-12-20 10:03
232 查看
//创建一个循环链表来作为接受对方数据的缓存 #include<iostream> #include<string.h> #include<assert.h> #include<stdio.h> typedef struct node { char *data; char *id; bool is_data; struct node *next; }buffer_node; class buffer { private: buffer_node *bufferlist; bool is_full; public: buffer(); ~buffer(); char *getData(); bool addData(const char *id,const char *message); }; buffer::buffer() { buffer_node **entry = &bufferlist; // buffer_node *head = bufferlist; for(int a = 0; a < 20; a++) { *entry = new buffer_node; //第一次:给bufferlist充值,后面次数为给节点next充值 (*entry)->data = new char[300]; (*entry)->id = new char[20]; (*entry)->is_data = false; memset((*entry)->data, 0, 300); memset((*entry)->id, 0, 20); entry = &(*entry)->next; //entry保存指向next指针的指针 } *entry = bufferlist; //next再次指向头指针 // std::cout<<"constructor"<<std::endl; } buffer::~buffer() { buffer_node *tmp = bufferlist; buffer_node *entry; for(int a = 0; a < 20; a++) { entry = tmp; //第一次为获取bufferlist,后面则为使用entry获取 delete[] entry->data; delete[] entry->id; tmp = entry->next; delete entry; } entry = NULL; tmp = NULL; bufferlist = NULL; } char *buffer::getData() //申请了内存需要自己释放 { for(int a = 0; a < 20; a++) { if(bufferlist->is_data == true) { char *data = new char[strlen(bufferlist->data)+1]; std::cout<<strlen(bufferlist->data)<<std::endl; strcpy(data, bufferlist->data); //id使用暂时未定 memset(bufferlist->data, 0, 300); memset(bufferlist->id, 0, 20); //使用后清零 bufferlist->is_data = false; return data; } bufferlist = bufferlist->next; } } bool buffer::addData(const char *id,const char *message) //为了使add后立刻能get使用数据,所以add不移动bufferlist指针 { assert(id != NULL && message != NULL); assert(strlen(id) < 19); buffer_node *tmp = bufferlist; for(int a = 0; a < 20; a++) { if(tmp->is_data == false) { strcpy(tmp->id, id); strcpy(tmp->data, message); tmp->is_data = true; //原来的代码tmp->is_data == true; 手贱啊啊啊!!多打了一个=,崩溃!! return true; } tmp = tmp->next; } return false; } //测试 int main() { buffer *read = new buffer; if(read->addData("55", "fuck") == false) std::cout<<"add erro"<<std::endl; //delete read; std::cout<<"1"<<std::endl; if(read->addData("55", "55safsdafsad") == false) std::cout<<"add erro"<<std::endl; std::cout<<"fdsff"<<std::endl; char *data1 = read->getData(); char *data2 = read->getData(); char *data3 = read->getData(); std::cout<<data1<<data2<<std::endl<<data3<<"fd"<<std::endl; // printf("%p",data); delete data1,data2; delete read; }
这个类创建时构造一个20个节点的链表,然后通过addData方法可以插入数据并把标记写为true表示有数据,通过getData方法获取数据并把标记置为false。get获得的内存指针需要自己释放内存,main为测试
相关文章推荐
- 【Angular4】如何给自己的Angular项目写一个好用的方便管理的SVG图标库
- 自己做的一个简单的用户管理(PHP)!
- [原创]最近学习STL,在C++库中苦寻不到BigInteger类,于是自己写了一个
- c++训练题(求某个数的最大质数因子)兼自己写的一个打印一定范围内质数方法
- 分享一个自己做的简易敏捷开发管理工具——AgileLite
- 通用权限管理系统组件 (GPM - General Permissions Manager) 自己动手只能写一个轻量级的权限系统了功能也不强大,这不是白白流血流汗吗?
- LVM逻辑卷管理@设备、格式、摩、引导自己主动安装一个完整的章节
- 使用C++和Boost库写一个自己的脚本引擎
- 自己做了一个C#桌面应用程序消费管理系统,功能感觉有点简陋,求点意见
- 晒自己做的一个管理系统(清新风格)EasyUI
- 看了一个老师布置的C++作业,也顺便练习一下,提高一下自己
- 如何在自己的信息管理系统里集成第三方权限控制组件 - 设计一个漂亮的WEB界面
- C/C++连接数据库MySQL(自己写的一个通讯录软件,供大家学习交流)
- 如何在自己的信息管理系统里集成第三方权限控制组件 - 开发一个好用稳定的开放组件
- 自己写的一个C++高位长真/伪随机数发生器类
- 用C++编写一个简单的员工工资管理系统~
- 项目管理心得:一个项目经理的个人体会、经验总结 (供自己参考)
- 自己写的一个基于C++的跨平台的轻量级日志类
- c++写的一个简单的管理系统
- C++面试题(二)——自己实现一个String类