c++ - std::unique 指针和自定义 lambda 删除器错误

标签 c++ visual-studio-2012 lambda smart-pointers unique-ptr

我正在尝试使用 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/

相关文章:

c# - 手动创建字符串资源文件不适用于应用程序

python - 过滤给定条件的最小元素

sql - LINQ 和 Lambda 表达式等效于 SQL In

c++ - 我怎么知道我上次的指示

c++ - std::map::const_iterator 模板编译错误

android - 使用 OpenCV 在 Android 上使用神经网络进行灰度图像分类

c++ - C++ std::string 中是否有任何函数可以计算两个字符串的相同起始字符总数或任何最佳方法

ios - Cordova visual studio ios 代理配置

c# - visual studio Word Addin 需要超过 15 秒才能关闭 word

c++ - 在 lambda 中捕获完美转发的变量