![]() |
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个字节。删除器类中的模板化移动构造函数对于移动
马克西姆·叶戈鲁什金的解决方案很好,但并不完整。
|
![]() |
santa · 如何在c中返回唯一所有权++ 7 年前 |
![]() |
Paco G · C++unique\u ptr的行为就像复制值一样 7 年前 |
![]() |
ciyo · 将唯一指针初始化为类成员 7 年前 |
![]() |
Chen · 使用初始化列表的向量 7 年前 |