我正在尝试将我的代码切换为使用 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
创建
最佳答案
不,make_shared
不能将删除器对象传递给它创建的 shared_ptr
。通常,您不需要这样做。由于它使用 new
(特别是放置 new
)来创建指针,因此需要通过调用析构函数来删除它。所以您无能为力,因为 make_shared
直接管理内存。
关于c++ - 将 make_shared 与不完整的类型一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10873783/