• 【智能指针 | 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

  • 相关阅读:
    C 标准库
    C 标准库
    C 标准库
    C 标准库
    Chrome内核保存为mhtml(单网页)
    C 标准库
    C 标准库
    【转】AOP
    [转]控制反转与依赖注入模式
    [转]乐观锁、悲观锁、死锁的区别
  • 原文地址:https://www.cnblogs.com/sunbines/p/15240378.html
Copyright © 2020-2023  润新知