C 複習之容器空間配置器allocator的實現

2021-10-07 07:16:52 字數 2415 閱讀 1845

#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...