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)
不幸的是,现在无法指定自定义删除器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到一个数组:它应该被使用吗?更多