给 shared_ptr 添加自定义 deleter 的几种方式

1. 使用函数

#include <iostream>
#include <memory>

void deleter(Sample* ptr) {
    std::cout << "delete function called" << std::endl;
    delete ptr;
}

std::shared_ptr<Sample> sp(new Sample, deleter);

2. 使用仿函数

#include <iostream>
#include <memory>

struct Deleter {
    void operator()(Sample* ptr) {
        std::cout << "deleter function called" << std::endl;
        delete ptr;
    }
};

std::shared_ptr<Sample> sp(new Sample, Deleter{});

3. 使用 lambda 表达式

#include <iostream>
#include <memory>

std::shared_ptr<Sample> sp(new Sample, [](Sample* ptr) {
    std::cout << "lambda function called" << std::endl;
    delete ptr;
});

4. 使用 std::default_delete

#include <iostream>
#include <memory>

std::shared_ptr<Sample> sp(new Sample, std::default_delete<Sample>{});



    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • NVIDIA GPU 架构:SP、SM 与 LSU 工作原理详解
  • al-folio 模板定制修改总结
  • al-folio 本地部署记录(Ubuntu 24.04)
  • C++ Traits
  • 道格拉斯-普克算法(Douglas–Peucker algorithm)