C++ StringBuilder 简易实现,多个对象共享同一内存
2017-08-24 14:58
645 查看
#pragma once #include <string.h> #include <stdlib.h> #include <string> class StringBuilder { public: const static int kDefaultSize = 64; public: StringBuilder() { init(); } StringBuilder(const char* str) { init(); append(str, strlen(str)); } ~StringBuilder() { } StringBuilder(const StringBuilder& ps) { _size = ps._size; _capacity = ps._capacity; _data = ps._data; } StringBuilder& operator = (const StringBuilder& ps) { _size = ps._size; _capacity = ps._capacity; _data = ps._data; return *this; } inline void init() { _size = 0; _capacity = new int(kDefaultSize); _data = new char*(new char[*_capacity]); (*_data)[_size] = '\0'; } inline void clear() { if (_capacity) { delete _capacity; _capacity = NULL; } if (_data) { char* p = *_data; delete[] p; p = NULL; delete _data; _data = NULL; } _size = 0; } inline StringBuilder& append(const char* str, int len) { if (len >= *_capacity - _size) { int cap = *_capacity; cap <<= 1; while (len >= cap - _size) cap <<= 1; extend(cap); } strncpy((*_data) + _size, str, len); _size += len; return *this; } inline StringBuilder& append(char ch) { if (1 >= *_capacity - _size) { int cap = *_capacity; cap <<= 1; while (1 >= cap - _size) cap <<= 1; extend(cap); } (*_data)[_size++] = ch; return *this; } inline StringBuilder& append(const char* str) { int len = strlen(str); return append(str, len); } inline StringBuilder& append(const std::string& str) { return append(str.c_str(), str.length()); } inline StringBuilder& append(int num) { return append(std::to_string(num)); } inline void extend(int cap) { *_capacity = cap; char* p = *_data; char* newp = new char[*_capacity]; strncpy(newp, p, _size + 1); delete[] p; *_data = newp; } inline const char* data() const { return (*_data); } inline int size() const { return _size; } inline int capacity() const { return _capacity ? *_capacity : 0; } private: int _size; int* _capacity; char** _data; };
相关文章推荐
- c++中用boost实现共享内存创建map容器
- C++实现记录类型内存分配方式的包装类,使对象(或原始类型)只能通过new的方式实例化
- 【RLIB】内存流(Stream) 的简易C++实现
- Windows or Linux环境下利用“共享内存”实现进程间通信的C/C++代码
- 在Delphi与C++之间实现函数与对象共享
- 在Delphi与C++之间实现函数与对象共享
- 以C++为例子,通过操作内存模拟实现对象的持久化存储(一)
- C++ 对象内存布局和多态实现原理
- 在Delphi与C++之间实现函数与对象共享
- 在Delphi与C++之间实现函数与对象共享
- Delphi与C++之间通过实现函数与对象共享
- Windows共享内存 C++及C#实现
- C++虚拟继承中_对象内存的分布_虚继承会多余分配虚表v-tab的指针vptr_图1-1清楚的描述了虚继承类对象内存的分布_转载淘宝共享数据平台
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- C++对象布局及多态实现探索之内存布局
- C++对象布局及多态实现探索之内存布局
- 在Delphi与C++之间实现函数与对象共享
- 简述c++中string对象的内存分配策略?如何获得其可存储的最大字节
- C++ 进程间共享内存-实现进程同步
- C++对象布局及多态实现探索之内存布局