将make_shared与不完整的类型一起使用
using make_shared with incomplete types
我正在尝试切换我的代码以使用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
直接管理内存。
相关文章:
- 将用户定义的类型与 std::vector 和 std::sort 一起使用
- 将 lower_bound/upper_bound 与 2 种不同的类型一起使用
- 不允许将SDL_Cursor与unique_ptr:error不完整类型一起使用
- 将提升属性映射与捆绑类型一起使用
- 将运算符<<与隐式转换的非基本数据类型一起使用时出错
- 将分配的内存与基本数据类型一起使用时,是否需要新放置? std::complex?
- 如何将模运算符与其他数据类型一起使用
- 使用#Define和Typedef与数据类型A一起使用
- 如何编写操作员==与隐式铸造/构造类型一起使用
- 测试 std::p ointer_traits 是否可以与我的类型一起使用
- 是否将invoke_result与void参数类型一起使用
- 将CloudViewer与自定义Pointt类型一起使用
- 将C++模板函数与生成器类型一起使用
- 如何将 std::enable_if 与自推返回类型一起使用
- QMetaType与模板化类型一起工作吗
- 如何将 cin 与未知输入类型一起使用
- 将make_shared与不完整的类型一起使用
- 如何将unordered_set与自定义类型一起使用
- 将"const"与标量类型一起使用的好处?(例如 "const double"或"const int")
- 偏移量可以与从decltype获得的结构类型一起使用吗?