C++基礎回顧4——動態陣列
C++語言庫提供兩種一次分配一個物件陣列的方法:
1.new表示式語法——分配記憶體和初始化一起
2.allocator類,分配和初始化分離。
int *pia = new int[42];
typedef int arrT[42];
int *p = new arrT;
//初始化動態分配物件的陣列
int *pia = new int[10];
int *pia = new int[10]();
int *pia = new int[10]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
new分配一個int陣列,並返回指向第一個int的指標。雖然。通常new T[]分配的記憶體為“ 動態陣列”,但當new分配一個陣列時,返回的並不是一個陣列型別的物件,而是一個指向陣列元素型別的指標,即分配一個陣列會得到一個元素型別的指標。
釋放動態陣列,例子如下,delete陣列是需要加[],delete單一物件時不需要[],unique_ptr對於動態陣列的釋放使用delete。
delete p; //p必須指向一個動態分配的物件或為空
delete [] pia; //pia必須指向一個動態分配的陣列或為空
unique_ptr<int []> up(new int[10]);
up.release(); //自動用delete[]銷燬其指標
與unique_ptr不同,shared_ptr不直接支援管理動態陣列,如果希望shared_ptr管理一個動態陣列,必須提供自己定義的刪除器。
//為了使用shared_ptr,必須提供一個刪除器
shared_ptr<int> sp(new int[10], [] (int *p){delete[] p;} );
sp.reset();
allocator類
為了定義一個allocator物件,必須指明這個allocator可以分配的物件型別,當一個allocator物件分配記憶體時,它會根據給定的物件型別來確定恰當的記憶體大小和對齊位置:
allocator<string> alloc; //分配string型別的allocator物件
auto const p = alloc.allocate(10); //分配n個未初始化的string
auto q = p;
alloc.construct(q++); //*q為空指標
alloc.construct(q++, 10, 'c'); //*q為ccccccccc
alloc.construct(q++, "hi"); //*q為hi
while(q != p)
{
alloc.destroy(--q);
}
標準庫allocator類及其演算法
- allocator〈T〉 a:
- a.allocate(n)
- a.deallocate(p, n)
- a.construct(p, args)
- a.destory(p)
- unintialized_copy(b, e, b2)
- unintialized_copy_n(b, n,b2)
- unintialized_fill(b, e, t)
- unintialized_fill_n(b, n, t)
相關文章
- C++基礎回顧4——智慧指標shared_ptrC++指標
- 演算法基礎:動態規劃陣列中滾動陣列的使用演算法動態規劃陣列
- 回顧JavaScript基礎——函式JavaScript函式
- 動態陣列陣列
- 靜態動態陣列陣列
- 陣列基礎使用陣列
- 2-7 陣列:動態陣列陣列
- C#基礎委託回顧C#
- day001|python基礎回顧Python
- Java基礎知識回顧 -SQLJavaSQL
- C++基礎回顧5——類的拷貝、複製和銷燬C++
- 建立動態陣列陣列
- C++容器巢狀實現動態二維陣列C++巢狀陣列
- 陣列004 動態建立一維陣列陣列
- 回顧 ES5新增陣列方法 與實現陣列
- JavaScript基礎(五)陣列JavaScript陣列
- JavaScript基礎——使用陣列JavaScript陣列
- 樹狀陣列基礎陣列
- golang基礎之陣列Golang陣列
- 傳統C++回顧C++
- List介面(動態陣列)陣列
- c++踩方格-動態規劃基礎題C++動態規劃
- Android知識點回顧之Activity基礎Android
- Azure Data Factory(九)基礎知識回顧
- Android知識點回顧之Service基礎Android
- JAVA基礎--二維陣列Java陣列
- NumPy 基礎 (一) - 建立陣列陣列
- Java核心基礎第4篇-Java陣列的常規操作Java陣列
- JavaScript回顧00:字串,陣列,物件和ES6新特性JavaScript字串陣列物件
- Java基礎知識回顧之六 —– IO流Java
- Java基礎知識回顧之六 ----- IO流Java
- 閱讀原始碼,通過LinkedList回顧基礎原始碼
- 手動實現ArrayList動態陣列陣列
- C語言基礎-1、陣列C語言陣列
- Go 基礎教程--6 陣列 ArrayGo陣列
- Go 基礎教程--5 陣列 ArrayGo陣列
- NumPy 基礎 (二) - 陣列運算陣列
- 【重溫基礎】10.陣列陣列