我正在使用VS2013,并发现在使用包含lambda的类的多个实例时,我认为是奇怪的行为,并且这些lambdas包含静态变量.静态变量似乎是共享的.
示例代码,非常精简但仍然捕获了本质:
class HasLambda
{
public:
typedef const char* ( *ToCharPtr ) ( const int& );
void Init( ToCharPtr pfnToCharPtr ) {
m_pfnCharPtrConverter = pfnToCharPtr;
}
const char* IntToString( int i ) {
return m_pfnCharPtrConverter( i );
}
static HasLambda* Make() {
HasLambda* pHasLambda = new HasLambda;
pHasLambda->Init( [] ( const int &i ) -> const char* { static char buf[ 33 ]; sprintf( buf, "%d", i ); return buf; } );
return pHasLambda;
}
protected:
ToCharPtr m_pfnCharPtrConverter;
};
int …Run Code Online (Sandbox Code Playgroud)