2016-12-02 42 views
4
int i = 9; 
struct_variable.f = [i](T struct_variable&) { 
    do_something_with_capture_variable(i); 
    ... 
    struct_variable.f = another_compatible_std_function; 
    //do something else, but never use captured variable after here 
    ... 
}; 

struct_variable.f(struct_variable); 

lambda函數被保存爲構件struct_variable.f(這也是鍵入std::function),和在回調,struct_variable.fanother_compatible_std_function結束之後使用所拍攝的變量取代。分配新值到std ::功能而調用

這種做法是否保證安全?

+0

只要您小心,我想說是,因爲這種情況類似於在執行某個成員函數時刪除一個對象。但這很難從標準中證明。 – aschepler

回答

0

lambda的代碼部分被編譯爲機器代碼,並且只在賦值期間指向指向該代碼的指針函數。所以只要你不再使用捕獲的變量,重新分配保存lambda的變量應該是安全的,因爲不會改變運行代碼。