[C++11]独占的智能指针unique_ptr的删除器
生活随笔
收集整理的這篇文章主要介紹了
[C++11]独占的智能指针unique_ptr的删除器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
unique_ptr 指定刪除器和 shared_ptr 指定刪除器是有區別的,unique_ptr 指定刪除器的時候需要確定刪除器的類型,所以不能像 shared_ptr 那樣直接指定刪除器,舉例說明:
代碼如下:
#include <iostream> #include <memory> #include <string> using namespace std;class Test { public:Test(){cout << "construct" << endl;}Test(int x) :m_num(x){cout << "construct x = " << x << endl;}Test(string str){cout << "construct str = " << str << endl;}~Test(){cout << "destruct" << endl;}void setValue(int v){m_num = v;}void print(){cout << "m_num = " << m_num << endl;}private:int m_num; };int main() {using ptrFunc = void(*)(Test *);unique_ptr<Test,ptrFunc> ptr4(new Test("hello"), [](Test * t){cout << "------------------" << endl;delete t;});return 0;}測試結果:
代碼如下:
//error 捕獲了外部變量的lambda表達式只能看做仿函數using ptrFunc = void(*)(Test *);unique_ptr<Test, ptrFunc> ptr4(new Test("hello"), [=](Test * t){cout << "------------------" << endl;delete t;});上面的代碼中錯誤原因是這樣的,在 lambda 表達式沒有捕獲任何外部變量時,可以直接轉換為函數指針,一旦捕獲了就無法轉換了,如果想要讓編譯器成功通過編譯,那么需要使用可調用對象包裝器來處理聲明的函數指針:
#include <iostream> #include <memory> #include <string> #include <functional> using namespace std;class Test { public:Test(){cout << "construct" << endl;}Test(int x) :m_num(x){cout << "construct x = " << x << endl;}Test(string str){cout << "construct str = " << str << endl;}~Test(){cout << "destruct" << endl;}void setValue(int v){m_num = v;}void print(){cout << "m_num = " << m_num << endl;}private:int m_num; };int main() {//error 捕獲了外部變量的lambda表達式只能看做仿函數/*using ptrFunc = void(*)(Test *);unique_ptr<Test, ptrFunc> ptr4(new Test("hello"), [=](Test * t){cout << "------------------" << endl;delete t;});*///捕獲了外部變量的lambda表達式只能看做仿函數,要把它包裝才可以unique_ptr<Test,function<void(Test*)>> ptr4(new Test("hello"), [=](Test * t){cout << "------------------" << endl;delete t;});return 0;}獨占的智能指針可以管理數組類型的地址,能夠自動釋放。
代碼如下:
int main() {//獨占的智能指針可以管理數組類型的地址,能夠自動釋放unique_ptr<Test[]> ptr4(new Test[3]);return 0; }測試結果:
總結
以上是生活随笔為你收集整理的[C++11]独占的智能指针unique_ptr的删除器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蒸芋头的功效与作用、禁忌和食用方法
- 下一篇: 薏米粉的功效与作用、禁忌和食用方法