使用不完整类型的make_shared

时间:2012-06-03 20:40:01

标签: c++ stl shared-ptr incomplete-type make-shared

我正在尝试切换我的代码以使用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

1 个答案:

答案 0 :(得分:3)

不,make_shared无法将删除对象传递给它创建的shared_ptr。通常,你不需要。由于它使用new(具体为new}来创建指针,因此需要通过调用析构函数来删除它。所以你可以做的并不多,因为make_shared直接管理内存。