一般情況下,記憶體分配和物件構造組合一起可能會導致不必要的浪費,比如:
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 使用離型劑時,首先要...
使用方法 卡丁車輪胎使用方法
輪胎的使用方法很重要 卡丁車輪胎是卡丁車場日常執行中的主要易損件,但是輪胎的使用方法很重要。哪些情況下會縮短輪胎的使用壽命呢?一 跑道地面粗糙 有的跑道在鋪瀝青時,或者選錯了瀝青中石子的規格,或者碾壓得不夠平整,導致路面粗糙。有的跑道使用現成的水泥地,但表面粗糙或不平整。有的室內跑道,為了提高輪胎的...