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