![]() |
1
5
使用定义为无状态的删除器
使用函数模板而不是类模板作为删除器,不需要指定删除器类模板参数,也不必包含CUDA头文件。
由于C++17,一个无捕获的lambda闭包也可以用作零开销的删除器:
编译于
|
![]() |
2
0
另一种方法是包装你奇怪的删除对象,使它们表现良好。也许是这样的:
有了它,你应该能够使用
|
![]() |
3
0
很难通过特定的TYPE存储lambda函数(闭包),比如
请注意,C++标准并不能保证lambda函数可以简单地复制,因此我们不能直接对其进行memcpy,只能对其进行包装。 参考:asio/experimental/detail/channel_service。hpp:try_receive 请参阅下面的伪代码:
在构造/取消构造此结构之前,我们必须知道类型T,我们无法避免它,因为C++不支持运行时类型。但是,我们可以在没有
|
![]() |
4
-1
以下是使用lambda函数作为删除器的正确语法,这是您最初的问题。
但是,正如许多人所指出的那样,这增加了unique_ptr的大小。这对你来说可能很重要,也可能不重要,但有更好的方法。。。
使用大小为0的删除器对象将为每个对象节省32个字节。删除器类中的模板化移动构造函数对于移动
马克西姆·叶戈鲁什金的解决方案很好,但并不完整。
|
|
user8005765 · Karatsuba-多项式与CUDA相乘 6 年前 |
![]() |
wubw · Skybox渲染的VkRenderPass加载操作问题 7 年前 |
![]() |
theateist · 我可以在驱动显示输出的设备上调试CUDA吗? 7 年前 |
![]() |
tmlen · OpenCL死锁可能性 7 年前 |