将make_shared与不完整的类型一起使用

using make_shared with incomplete types

本文关键字:类型 一起 make shared      更新时间:2023-10-16

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

编辑:只是为了澄清,我想问我是否可以将删除器类型传递给使用make_shared创建的shared_ptr

不,make_shared不能将删除器对象传递给它创建的shared_ptr。一般来说,你不需要。由于它使用 new(特别是放置new)来创建指针,因此需要通过调用析构函数来删除它。因此,您无能为力,因为make_shared直接管理内存。