dl
dl_memory_bank.h
浏览该文件的文档.
1
14#pragma once
15
16namespace dl
17{
19 template<typename T>
21 {
22 public:
24 _p{ nullptr },
25 _cur{ 0 },
26 _size{ 0 }
27 {
28 }
29
30 void Clear()
31 {
32 //清空后显示析构
33 for (size_t i = 0; i < _cur; ++i)
34 {
35 (_p + i)->~T();
36 }
37 _cur = 0;
38 }
39
40 template<typename... Args>
41 T* Get(Args&& ...args)
42 {
43 _check();
44 return new (_p + _cur++) T(args...);
45 }
46
48 T* begin() { return _p; }
49 T* end() { return _p + _cur; }
50
52 {
53 //需要显示析构
54 for (size_t i = 0; i < _cur; ++i)
55 (_p + i)->~T();
56 free(_p);
57 }
58 private:
59 T* _p;
60 size_t _cur;//指向下一个空闲位置
61 size_t _size;
62
63 void _check()
64 {
65 //原有内存不会变化
66 if (_cur >= _size)
67 {
68 _size = _size ? _size * 2 : 1;
69 _p = (T*)realloc(_p, _size * sizeof(T));
70 }
71 }
72 };
73
74}
T * Get(Args &&...args)
T * begin()
支持C++迭代写法