c – std :: unique指针和自定义lambda删除器错误
作者:互联网
我试图使用std :: unique_pointer并提供自定义lambda删除器,但我收到语法错误:
cannot convert from 'wmain::<lambda_0f8f736f48c52ca6fa24492e7c0c1ec0>' to 'const std::default_delete<_Ty>'
使用以下简单的最小代码:
#include <memory>
class TestClass
{
};
typedef std::unique_ptr<TestClass> TestClassPtr;
int _tmain(int argc, _TCHAR* argv[])
{
TestClassPtr testPtr(new TestClass(), [](TestClass* w){ delete w;});
return 0;
}
这是向智能指针提供lambda删除器的错误方法吗?
解决方法:
删除器必须是unique_ptr类型的一部分.
typedef std::unique_ptr<TestClass, void(*)(TestClass *)> TestClassPtr;
进行此更改后,您的代码应该可以正常工作.另外,我假设你要做的事情不仅仅是在删除器中的指针上调用delete.如果没有,则无需提供自定义删除器.
标签:c,lambda,smart-pointers,visual-studio-2012,unique-ptr 来源: https://codeday.me/bug/20190831/1777447.html