【发布时间】:2014-03-03 23:16:42
【问题描述】:
我在程序的一部分中遇到了问题,我将一个充当 lambda 函数的对象传递给另一个函数(我需要捕获一个 const this 指针,因此我不能使用实际的 lambda)。这导致我的 lambda 的复制构造函数被调用,它再次调用复制构造函数,最终堆栈溢出。我明白发生了什么,但我不确定为什么复制构造函数会调用自己或如何解决这个问题。我已经重现了下面的问题。
编译器:MSVC 2010
#include <functional>
void synchronizedExecution(std::function<void()> function) {
function();
}
int main(int argc, char *argv[])
{
int b = 0;
class Function : public std::function<void()> {
public:
int& b;
Function(int& b) :
b(b) {}
void operator()() {}
} function(b);
synchronizedExecution(function);
return 0;
}
【问题讨论】:
-
main()中的类声明/定义看起来错误(至少声明后缺少分号!)。 -
声明对我来说看起来很好。分号就在实例之后。
-
g++下没问题(无递归)...你用的是Visual Studio 2010还是2012?
-
类声明/定义很好 - 它只是使用另一种语法来声明类的变量并使用构造函数对其进行初始化,传递
b。 -
继承
std::function是一个可怕的想法。你为什么这样做?
标签: c++ copy-constructor default-constructor