0

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

4

1 回答 1

3

不,make_shared不能将删除器对象传递给shared_ptr它创建的对象。通常,您不需要这样做。由于它使用new(专门放置new)来创建指针,因此需要通过调用析构函数将其删除。因此,您无能为力,因为make_shared直接管理内存。

于 2012-06-03T20:48:04.110 回答