C++ 使用make_与不完整类型共享
我试图将我的代码切换为使用C++ 使用make_与不完整类型共享,c++,stl,shared-ptr,incomplete-type,make-shared,C++,Stl,Shared Ptr,Incomplete Type,Make Shared,我试图将我的代码切换为使用make_shared(),但是我有很多不完整的类型(在创建时完成),我想知道make_shared是否可以与不完整的类型一起工作,或者允许我传递一个deleter类型 我四处看了看,没有发现任何与此相关的帖子,所以要么就是这样就行了??或者我忽略了一些基本的东西 #define NEW_PARAMS(Type, ...) ::std::shared_ptr<Type>(new (Type)(__VA_ARGS__), ::std::default_de
make_shared()
,但是我有很多不完整的类型(在创建时完成),我想知道make_shared是否可以与不完整的类型一起工作,或者允许我传递一个deleter类型
我四处看了看,没有发现任何与此相关的帖子,所以要么就是这样就行了??或者我忽略了一些基本的东西
#define NEW_PARAMS(Type, ...) ::std::shared_ptr<Type>(new (Type)(__VA_ARGS__), ::std::default_delete<Type>())
#定义新参数(类型:):std::shared_ptr(新(类型)(uu VA_ARGS);:std::default_delete())
上面是我用来创建新对象的宏。要将此转换为
#define NEW_PARAMS(Type, ...) ::std::make_shared<Type>(__VA_ARGS__, ::std::default_delete<Type>())
#定义新参数(类型:):std::使_共享(uu VA_ARGS_uu,::std::default_delete())
编辑:我只是想澄清一下,我想问是否可以将删除器类型传递给使用
make\u shared创建的shared\u ptr
,make\u shared
无法将删除器对象传递给它创建的shared\u ptr
。一般来说,你不需要这样做。由于它使用new
(特别是放置new
)创建指针,因此需要通过调用析构函数将其删除。因此,您所能做的不多,因为make_shared
直接管理内存。不,make_shared
无法将删除器对象传递给它创建的shared_ptr
。一般来说,你不需要这样做。由于它使用new
(特别是放置new
)创建指针,因此需要通过调用析构函数将其删除。因此,您所能做的不多,因为make_shared
直接管理内存。创建时即调用new或make_shared时,类型已完成。@Sharad:那么编译器中会出现什么错误?make_shared
的这些用法在哪里?对不起,我想我没有抓住问题的重点。我想知道是否可以将删除程序传递给新创建的共享\u ptr?类型在创建时即调用new或make\u shared时完成。@Sharad:那么编译器中会出现什么错误?make_shared
的这些用法在哪里?对不起,我想我没有抓住问题的重点。我想知道我是否可以将删除器传递给新创建的共享\u ptr?“我想问我是否可以将删除器类型传递给使用make\u shared创建的共享\u ptr”您是否可以通过实际询问来澄清这个问题,而不是主要谈论与您尝试执行的操作无关的不完整类型?请重申您的问题。“我想问我是否可以将deleter类型传递给使用make_shared创建的共享\u ptr”您是否可以通过实际询问来澄清该问题,而不是主要讨论与您尝试执行的操作无关的不完整类型?请再说一遍你的问题。