我剛接觸cpp並試圖使用lambda函數。我有一個計數器,我試圖在lambda函數內增加一個內部值。我看到一些我無法理解的奇怪記憶錯誤。這是我與這個櫃檯合作的流程。有什麼我做錯了嗎?C++ Lambda函數關閉 - 內存問題
bool SomeClass::func() {
int64_t counter = 0;
//some loop logic {
counter++;
}
auto lamb = [this, &counter]() {
//some logic
counter++;
}
someotherFunction(data, lamb); // this function will execute the lambda
}
由於該函數被寫入,它應該工作 - 因爲如果在'someotherFunction'內執行'lamb',那麼'counter'仍然在範圍內。但是,如果'someotherFunction' *存儲* lambda,並且稍後在'func'返回後,lambda被執行,那麼你有一個懸而未決的引用問題。 –
但看看下面的評論,似乎如果其他功能的執行超過func執行,那麼它會失敗嗎? – sublime
關鍵是你從* func中*調用'someotherFunction',這意味着它*不能*超過'func'。 –