给 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:

  • al-folio 本地部署记录(Ubuntu 24.04)
  • C++ Traits
  • 道格拉斯-普克算法(Douglas–Peucker algorithm)
  • CMake支持库收集
  • QGC代码架构解析:飞行前检查(起飞条件)