空間配置器allocator負責空間的配置和管理,是一種實現了動態空間配置、空間管理、空間釋放的class template。
1.空間配置器的標準介面
allocator::value_type
allocator::pointer
allocator::const_pointer
allocator::reference
allocator::const_reference
allocator::size_type
allocator::different_type
allocator::rebind
allocator::allocator() // default constructor
allocator::allocator(const allocator&) // copy constructor
template allocator::allocator(const allocator&) // 泛化的copy constructor
allocator::~allocator()
pointer allocator::address(reference x) const
const_pointer allocator::address(const_reference x) const
pointer allocator::allocate(size_type n, const void*=0)
void allocator::deallocator(pointer p, const t& x)
size_type allocator::max_size() const
void allocator::construct(pointer p, const t& x)
void allocator::destroy(pointer p)
2. sgi 標準的空間配置器 std::allocator
事實上,sgi從未使用過這個配置器,主要原因是效率不好,只是把c++的::operator new 和 ::operator delete做了一層封裝而已,其空間配置的兩個函式如下所示:
templateinline t* allocate(ptrdiff_t size, t*)
3. sgi具有次配置能力的空間配置器
sgi stl使用的空間配置器為alloc,sgi stl每個容器都已經指定了其預設的空間配置器為alloc,例如下面關於vector的宣告:
template //預設使用alloc為配置器
class vector ;
雖然alloc沒有提供標準的介面,但是sgi採用乙個間接層,提供乙個具有標準介面的配置器******_alloc。
未完待續。。。。。。。。。。。。。。。
STL之空間配置器
最近在看侯捷老師寫的stl原始碼剖析,想通過看優秀的 來提高自己的程式設計水平。首先stl提供了六大元件,彼此可以套用使用。借助一張從書上截的圖來表明 container通過allocator來獲取資料儲存空間 algorithms通過迭代器來獲取container的內容,functors可以協助a...
STL之空間配置器
pragma once include 為了malloc free include define throw bad alloc std cerr class onespce 對free的封裝 static void deallocate void p,size t n 這個size t完全可以不要...
STL 空間配置器
stl有6大元件 容器 演算法 迭代器 仿函式 配接器 分配器。它們之間的密切關係是stl的精髓所在,容器用來存放資料,而容器存在的前提是要有分配器給它分配記憶體,接下來需要實現演算法,迭代器便作為演算法來對容器資料操作的橋梁,演算法可以使用仿函式完成不同的策略變化,配接器可修飾或套接仿函式。說了麼...