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

The*_*yer 6 c++ arrays shared-ptr

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

int n = 5;
shared_ptr<int> a(new int[n], default_delete<int[]>());
Run Code Online (Sandbox Code Playgroud)

我想让它看起来像是类似的东西,但是为int数组分配内存并且还有一个自定义删除器.那可能吗?

int n = 5;
shared_ptr<int> a;
a = make_shared<int>();
Run Code Online (Sandbox Code Playgroud)

Cur*_*ous 7

不幸的是,现在无法指定自定义删除器std::make_shared,但是,make_shared如果需要,可以创建一个包装器

(效率稍低,但是¯\ _(ツ)_ /¯)

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;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

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

如果你只想使用a shared_ptr并让它指向一个数组,请参阅shared_ptr到一个数组:它应该被使用吗?更多