zoukankan      html  css  js  c++  java
  • 【智能指针 | 01】std::shared_ptr的使用教程

    给shared_ptr添加自定义删除器的几种方式

    1. 使用lambda表达式

     1 #include <iostream>
     2 #include <memory>
     3 
     4 int main()
     5 {
     6   std::shared_ptr<int>(new int[5](), [](int *x) {
     7     std::cout << "Delete function called" << std::endl;
     8     delete[] x;
     9   });
    10 }

     2. 使用普通函数

     1 #include <iostream>
     2 #include <memory>
     3 
     4 void deleter(int *x)
     5 {
     6   std::cout << "Delete function called" << std::endl;
     7   delete[] x;
     8 }
     9 
    10 int main()
    11 {
    12   std::shared_ptr<int>(new int[5](), deleter);
    13 }

    3.使用类重载:

     1 #include <iostream>
     2 #include <memory>
     3 
     4 class Deleter
     5 {
     6 public:
     7   void operator()(int *x)
     8   {
     9     std::cout << "Delete function called" << std::endl;
    10     delete[] x;
    11   }
    12 };
    13 
    14 int main()
    15 {
    16   std::shared_ptr<int>(new int[5](), Deleter());
    17 }

     4. 使用std::default_delete:

     1 #include <memory>
     2 #include <vector>
     3 #include <algorithm>
     4 
     5 int main()
     6 {
     7   {
     8     std::shared_ptr<int> shared_good(new int[10], std::default_delete<int[]>());
     9   }
    10 
    11   std::vector<int *> v;
    12   for (int n = 0; n < 100; ++n)
    13     v.push_back(new int(n));
    14   std::for_each(v.begin(), v.end(), std::default_delete<int>());
    15 }

    参考资料

    1. c++11:std::default_delete

  • 相关阅读:
    【编程练习】poj1111
    Android项目开发填坑记-Fragment的onBackPressed
    【编程练习】poj1068
    HTML DOCTYPE文档类型举例说明
    css link import
    css position relative obsolution
    UL/LI
    背离
    stock 当天盘势
    stock 仓位
  • 原文地址:https://www.cnblogs.com/sunbines/p/15240378.html
Copyright © 2011-2022 走看看