allocator 使用 作用:只開闢空間,不調用構造函數 操作一覽表 | | | | | | | allocator\ a | 定義一個名為a的allocator對象,它可以為類型為T的對象分配記憶體 | | a.allocate(n) | 分配一段連續的為構造的內,能容納n個類型為T的對象 | | ...
allocator 使用
作用:只開闢空間,不調用構造函數
操作一覽表
allocator<T> a | 定義一個名為a的allocator對象,它可以為類型為T的對象分配記憶體 |
a.allocate(n) | 分配一段連續的為構造的內,能容納n個類型為T的對象 |
a.deallocate(p, n) | 釋放從指針p中地址開始的記憶體,這塊記憶體保存了n個類型為T的對象。p必須是以個先前有allocate返回的指針,而且n必須是創建p時所要求的大小。在調用deallocate以前,用戶必須對每個在這塊記憶體中創建的對象調用destroy |
a.construct(p, args) | p必須是一個類型為T的指針,指向一塊原始記憶體;args被傳遞給類型為T的構造函數,用來在p指向的記憶體塊中構造一個對象。 |
a.destroy(p) | p為類型為T的指針,對p指向的對象執行析構函數。 |
小例子
#include <iostream>
#include <memory>
using namespace std;
class test{
public:
explicit test(int d = 0) : data(d){cout << "new" << data << endl;}
~test(){cout << "del" << data << endl;}
void fun(){cout << data << endl;}
public:
int data;
};
int main(){
allocator<test> alloc;
auto const p = alloc.allocate(2);
alloc.construct(p, test(1));
p->fun();
auto q = p + 1;
alloc.construct(q, test(2));
q->fun();
alloc.destroy(p);
alloc.destroy(q);
alloc.deallocate(p,2);
}