1. 程式人生 > >C++11中智慧指標的使用

C++11中智慧指標的使用

1.C++11中新增了三種智慧指標,在初始化指標後,如果類被析構,那指標所指向的物件會被自動析構,方便了程式設計師對指標的控制。

share_ptr:共享的智慧指標

weak_ptr:配合share_ptr使用的弱指標

unique_ptr:獨佔的智慧指標

2.智慧指標用於動態陣列的管理

2.1 unique_ptr管理動態陣列

unique_ptr<int[]> up(new int [10]);

up.release();//自動呼叫delete[]銷燬其指標

2.2 share_ptr可用於管理動態陣列,但必須提供自己的刪除器

如:shared_ptr<int> sp(new int[10],[](int *p){delete[] p;})

2.3 new 和delete配對使用管理陣列

int *pia= new int [10];

int *pia= new int [10]{0,12,54,12254,int (10)};

delete []pia;

2.4 使用allocator來構造陣列指標

智慧指標雖然方便,但沒有將構造和分配記憶體分離,可通過allocator進行陣列的分配和銷燬

 例:allocator<int> a;//定義一個名為a的allocator物件,它可以為型別為int的物件分配記憶體。
          auto p = a.allocate(10);//分配一段元素的未構造的記憶體

            auto q=p;//指向最後構造基函式之後的位置

            a.construct(q++,10, 1);//,構造操作,q為1111111111

             while(q!=p)
            a.destroy(--q);//釋放真正構造的Int記憶體

             a.deallocate(p,n);//釋放陣列記憶體,還給系統