使用std :: unique_ptr和std :: bind的问题

时间:2014-06-10 11:34:24

标签: c++ c++11 smart-pointers

我试图通过std :: bind传递std :: unique_ptr(数组类型),我收到了编译错误。

#include <functional>
#include <memory>
#include <stdio.h>
#include <string.h>

class PrintClass 
{ 
public:
    void printFunc(std::unique_ptr<char[]> text) 
    {
        printf("Printed text %s\n", text.get());
    }
};


int main() 
{
    std::unique_ptr<PrintClass> printObj(new PrintClass);
    std::unique_ptr<char[]> buffer(new char[1024]);
    strcpy(buffer.get(),"Test data"); 
    std::function<void()> fn = std::bind(&PrintClass::printFunc,
        printObj.get(), std::move(buffer));
    fn();
}

这将返回以下编译器错误:

  

test.cpp:在函数int main()中:   test.cpp:21:98:错误:从std::_Bind_helper<false, void (PrintClass::*)(std::unique_ptr<char []>), PrintClass*, std::unique_ptr<char [], std::default_delete<char []> > >::type {aka std::_Bind<std::_Mem_fn<void (PrintClass::*)(std::unique_ptr<char []>)>(PrintClass*, std::unique_ptr<char []>)>}转换为非标量类型std::function<void()>请求       std :: function fn = std :: bind(&amp; PrintClass :: printFunc,printObj.get(),&gt; std :: move(buffer));

我正在编译:

g++ -std=c++11 ...

我可以使用原始指针但是我冒着内存泄漏的风险。那么如何通过std :: bind接口传递缓冲区的所有权?

我在这里使用字符串来说明我的观点。我真正的问题涉及传递二进制内存缓冲区,我想确保不泄漏。

请忽略使用strcpy而不进行数组边界检查,我只是想把一些东西拼在一起来说明我的问题。

0 个答案:

没有答案