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? 了解更多信息
是否可以对 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? 了解更多信息