其他分享
首页 > 其他分享> > c – std :: unique指针和自定义lambda删除器错误

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