C Allocator使用方法

2021-10-01 10:22:35 字數 2235 閱讀 8113

一般情況下,記憶體分配和物件構造組合一起可能會導致不必要的浪費,比如:

string

*const p =

newstring

[n];

//構造n個空string

string s;

string

*q = p;

while

(cin >

> s && q != p+n)

*q++

=s;//賦予*q乙個新值

const size_t size = q-p;

//記住我們讀取了多少個string

delete [

] p;

new表示式分配並初始化了n個string.但是,我們可能不需要n個string,少量string可能就足夠了。這樣,我們就可能建立了一些永遠也用不到的物件。而且,對於那些確實要使用的物件,我們也在初始化之後立即賦予了它們新值,每個使用到的元素都被賦值了兩次:第一次是在預設初始化時,隨後是賦值時候.

更重要的是,那些沒有預設建構函式的類就不能動態分配陣列了

標準庫allocator類定義在標頭檔案xmemory0中,它幫助我們將記憶體分配和物件構造分離開來。它是乙個模板,定義乙個allocator物件,我們必須指明這個allocator可以分配的物件型別。當乙個allocator物件分配記憶體時,它會根據給定的物件型別來確定恰當的記憶體大小和對齊位置。

allocator<

string

>alloc;

//可以分配string的allocator物件

auto const p = alloc.

allocate

(n);

//分配n個未初始化的string

a.

allocate

(num)

a.

construct

(p,val)

a.

destroy

(p)

a.

deallocate

(p,num)

allocator分配的記憶體是未構造的,我們按需要在此記憶體中構造物件.

auto q = p;

alloc.

construct

(q++);

// *q為空字串

alloc.

construct

(q++,10

,'c');

//*q為cccccccccc

alloc.

construct

(q++

,"hi");

//*q為hi

當我們用完物件後,必須對每個構造的元素呼叫destroy來銷毀它們
while

(q != p)

一旦元素被銷毀後,我們就可以重新使用這部分記憶體來儲存其他string,也可以將其歸還給系統,釋放記憶體通過呼叫deallocate來完成:
alloc.

deallocate

(p,n)

;

標準庫還未allocator類定義了兩個伴隨演算法,可以在未初始化記憶體中建立物件

;//通過拷貝vi中的元素來構造從p開始的元素

uninitialized_fill_n

(q, vi.

size()

,42);

//將剩餘元素初始化為42

pythonpip使用方法 pip使用方法整理

匯出專案已安裝的pip包 pip list 檢視專案中安裝的包 pip freeze requirements.txt 將專案中所用到的第三方庫輸出到requirements.txt中 pip install 版本號 pip install i 本次使用清華源進行安裝 離線安裝第三方庫 一鍵安裝整個...

使用方法 離型劑使用方法

1 使用離型劑前必須確保模具乾淨,無粉塵 蠟垢 樹脂垢 油汙等殘留物質。可以使用專用的模具潔模劑進行清洗,不可用其他液體清洗,以免清洗不乾淨或損壞模具。另外,如果您的模具是新的,在清洗乾淨後,務必要對模具進行初步處理,用離型劑在模具表面噴 刷塗5 6次,之後方可正常投入生產。2 使用離型劑時,首先要...

使用方法 卡丁車輪胎使用方法

輪胎的使用方法很重要 卡丁車輪胎是卡丁車場日常執行中的主要易損件,但是輪胎的使用方法很重要。哪些情況下會縮短輪胎的使用壽命呢?一 跑道地面粗糙 有的跑道在鋪瀝青時,或者選錯了瀝青中石子的規格,或者碾壓得不夠平整,導致路面粗糙。有的跑道使用現成的水泥地,但表面粗糙或不平整。有的室內跑道,為了提高輪胎的...