是否可以使用 make_shared 和自定义删除器来获取shared_ptr<>的数组?指向(下面是我尝试通过构造函数执行此操作的方式,但我不知道通过使用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>();
答案 0 :(得分:6)
遗憾的是,目前无法使用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?了解更多