我正在尝试切换我的代码以使用make_shared<type>()
,但我有很多不完整的类型(在创建时完成)并且想知道是否有make_shared可以使用不完整的类型或允许我传递删除类型。
我环顾四周,没有找到任何与此相关的帖子,所以要么这只是工作?或者我忽略了一些基本的东西。
#define NEW_PARAMS(Type, ...) ::std::shared_ptr<Type>(new (Type)(__VA_ARGS__), ::std::default_delete<Type>())
上面是我用来创建新对象的宏。想将此转换为
#define NEW_PARAMS(Type, ...) ::std::make_shared<Type>(__VA_ARGS__, ::std::default_delete<Type>())
编辑:只是为了澄清我想问一下我是否可以将删除类型传递给使用shared_ptr
创建的make_shared
答案 0 :(得分:3)
不,make_shared
无法将删除对象传递给它创建的shared_ptr
。通常,你不需要。由于它使用new
(具体为new
}来创建指针,因此需要通过调用析构函数来删除它。所以你可以做的并不多,因为make_shared
直接管理内存。