我正在尝试使用 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++ - std::unique 指针和自定义 lambda 删除器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17931227/