C++ Vector 实现内存管理基类
注意: 本人是原创, 如若发现雷同,后果自负
注意, 将使用C++ 17来实现
将使用统一的名称空间custom
设计
- 分配内存和释放内存
- 引用计数
- 管理使用大小
- 管理已分配的内存
文件名: Array_data.hpp
名称空间: custom
类名: Array_data_base
包含的头文件: Ref_count.hpp
// Array_data.hpp
#ifndef ARRAY_DATA_HPP
#define ARRAY_DATA_HPP
// 使用 Ref_count 类
#include "Ref_count.hpp"
namespace custom
{
// Array_data_base 其实就是一个分配内存的控制块
//
// 图:
// | Array_data_base | 分配的内存 |
class Array_data_base
{
public:
using size_type = typename Ref_count::count_type;
Ref_count _ref; //引用计数
size_type _alloc; //已分配的内存
size_type _size; //已占用的大小
// 构造一个Array_data_base
// type_size 构造类型的大小
// elem_size 元素个数
static Array_data_base *allocate(size_type type_size,
size_type elem_num)
{
// 构造Array_data_base和元素的存放的地址
void* address = operator new(sizeof(Array_data_base) +
type_size * elem_num);
Array_data_base *_new = static_cast<Array_data_base *>(address);
// 构造Array_data_base
new (_new) Array_data_base();
_new->_ref._atomic = 1;
_new->_alloc = elem_num;
_new->_size = 0;
return _new;
}
// 析构一个Array_data_base
// data Array_data_base
// type_size 构造类型的大小
// elem_size 元素个数
static void deallocate(Array_data_base *_data, size_type type_size) noexcept
{
_data->_size = 0;
_data->_ref._atomic = 0;
operator delete(_data, sizeof(Array_data_base) + type_size * _data->_alloc);
}
void *data() noexcept
{
return reinterpret_cast<char *>(this) + sizeof(*this);
}
const void *data() const noexcept
{
return reinterpret_cast<const char *>(this) + sizeof(*this);
}
static const Array_data_base _shared_null;
static Array_data_base *shared_null() noexcept
{
return const_cast<Array_data_base *>(&_shared_null);
}
};
const Array_data_base Array_data_base::_shared_null{
std::numeric_limits<size_type>::max(),
0,
0
};
}
#endif
上一篇: C++ 高效的容器 - Vector - 实现底层 - 引用计数类
下一篇: C++ Vector 实现内存管理类
QQ交流群: 552641067