我有以下一段代码。
void functionName(std::function<void()> &&lambda){
void* h = (void *)malloc(sizeof(lambda));
memcpy(h,lambda, sizeof(lambda));
performTask(&h);
}
performTask将获取地址并运行lambda函数。 但是我无法执行memcpy,因为memcpy中的第二个参数必须是const void *。
所以我将memcpy修改为memcpy(h,(void *)&lambda,sizeof(lambda)); 尽管编译成功,但在运行过程中会抛出段错误。
在此代码方案中如何正确执行memcpy?
答案 0 :(得分:3)
首先std::function
不是lambda,它是用于包装各种可调用对象包括lambdas 的类模板。
第二,您绝对不要尝试使用malloc
,尤其是memcpy
非POD C ++类型。他们有自己的一组构造函数/赋值运算符,它们提供了正确复制它们的方法。例如:
void functionName(std::function<void()> &&lambda) {
auto h = new std::function<void()>(std::move(lambda));
performTask(h);
delete h; //assuming that performTask isn't asynchronous
}