#include
using namespace std;
//容器的空間配置器allocator
//做四件事情:記憶體開闢與釋放 物件構造與析構
//定義容器的空間配置器,和c++標準庫的allocator實現一樣
template>
struct allocator
void
deallocate
(void
*p)//負責記憶體釋放
void
construct(t
*p,const
t&val)
//負責物件構造
void
destroy(t
*p)//負責物件析構};
//容器底層,記憶體開闢與釋放,物件構造與析構,都通過allocator空間配置器;來實現
template, typename alloc = allocator<
t>>
class
vector
~vector()
_allocator.
deallocate
(_first)
;//釋放堆上的陣列記憶體
_first = _last = _end = nullptr;
}vector
(const vector<
t>
&src)
_last = _first + len;
_end = _first + size;
} vector<
t>
& operator=
(const vector<
t>
&src)
//delete_first;
for(
t*p = _first; p != _last;
++p)
_allocator.
deallocate
(_first)
;//釋放堆上的陣列記憶體
int size = src._end - src.first;
//_first = new t[size];
_first = _allocator.
allocate
(size)
; int len = src._last - src._first;
for(int i =
0; i < len; i++
) _last = _first + len;
_end = _first + size;
return
*this;}
void
push_back
(const
t val)
//向容器末尾新增元素
//*_last++ = val; _last指標指向的記憶體構造乙個值為val的物件
_allocator.
construct
(_last, val)
; _last++;}
void
pop_back()
//從容器末尾刪除元素
// --_last; 不僅要把_last指標--,還需要析構刪除的元素
--_last;
_allocator.
destroy
(_last);}
tback()
const
//返回容器末尾的元素值
bool full()
const
bool empty()
const
int size()
const
private:t
*_first;
//指向陣列起始位置
t*_last;
//指向陣列中有效元素的後繼位置
t*_end;
//指向陣列空間的後繼位置
alloc _allocator;
//定義容器的空間配置器物件
void
expand()
//delete_first;
for(
t*p = _first; p != _last;
++p)
_allocator.
deallocate
(_first)
; _first = _ptmp;
_last = _first + size;
_end = _first +
2* size;}}
;class
test
~test()
test
(const test&)}
;//測試用
int main()
STL之自己實現簡單地空間配置器allocater
size t是unsigned型別,用於指明陣列長度或下標,它必須是乙個正數,std size t ptrdiff t是signed型別,用於存放同一陣列中兩個指標之間的差距,它可以使負數,std ptrdiff t.size type是unsigned型別,表示容器中元素長度或者下標,vector...
C 空間配置器
空間配置器的作用 1 將物件構造和記憶體開闢進行分離。2 將物件析構和記憶體釋放進行分離。空間配置器的主要函式 1.allocate 進行記憶體的開闢,底層呼叫的就是malloc。2.deallocate 進行記憶體的釋放,底層呼叫的就是free。3.construct 使用定位new來負責給容器中...
STL之空間配置器
空間配置器allocator負責空間的配置和管理,是一種實現了動態空間配置 空間管理 空間釋放的class template。1.空間配置器的標準介面 allocator value type allocator pointer allocator const pointer allocator r...