Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用make_与不完整类型共享_C++_Stl_Shared Ptr_Incomplete Type_Make Shared - Fatal编程技术网

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”您是否可以通过实际询问来澄清该问题,而不是主要讨论与您尝试执行的操作无关的不完整类型?请再说一遍你的问题。