shared_ptr<> 到数组自定义删除器(使用 make_shared)

shared_ptr<> to an array custom deleter (with make_shared)

是否可以对 shared_ptr<> 指向的数组使用 make_shared 和自定义删除器(以下是我尝试的方式通过构造函数完成它,但我不知道如何使用 make_shared)?

int n = 5;
shared_ptr<int> a(new int[n], default_delete<int[]>());

我想让它看起来像与此类似的东西,但为 int 数组分配内存并具有自定义删除器。这可能吗?

int n = 5;
shared_ptr<int> a;
a = make_shared<int>();

遗憾的是,目前无法使用 std::make_shared 指定自定义删除器,但是,如果需要

,您可以围绕 make_shared 进行包装

(a little less efficient, 但¯\_(ツ)_/¯)

template <typename Type, typename Deleter, typename... Args>
auto make_shared_deleter(Deleter&& deleter, Args&&... args) {
    auto u_ptr = std::make_unique<Type>(std::forward<Args>(args)...);
    auto with_deleter = std::shared_ptr<Type>{
        u_ptr.release(), std::forward<Deleter>(deleter)};
    return with_deleter;
}

然后像这样使用它

int main() {
    auto ptr = make_shared_deleter<int>(std::default_delete<int>(), 1);
    cout << *ptr << endl;
}

如果您只想使用 shared_ptr 并让它指向数组,请参阅 shared_ptr to an array : should it be used? 了解更多信息