C++ 0x中的Lambda表達式/閉包如何使C++中的內存管理複雜化?爲什麼有些人說手動內存管理的語言中沒有封閉的地方?他們的主張是否有效?如果是,那麼背後的原因是什麼?Lambda表達式和內存管理
10
A
回答
10
Lambdas可以超越它們創建的上下文。通過引用綁定自由變量可能是一個問題,因爲當lambda想要稍後訪問它們時,它們可能不再存在。這只是「不要通過引用返回本地變量」。
15
這樣的論點是一個紅色的鯡魚。是的,lambda需要處理內存管理問題,但lambda基本上就像一個帶有成員變量的函數對象(函子)。無論函子需要處理什麼問題,lambda都必須處理。 C++ 0x lambdas有設施來決定要捕獲哪些對象以及它是按值還是按引用。這與在函數對象中存儲值和引用類似。
2
C++ 0x中的Lambda表達式/閉包如何使C++中的內存管理變得複雜?
他們呢?它們只是用於創建函數對象的語法糖。沒有我們以前沒有見過的。直到現在,我們還有一個簡短的語法來創建這些動態的。
爲什麼有人說封閉式語言在手動內存管理中沒有地位?
你應該問問他們。我發現C++ 0x lambda方法相當優雅和低級。它符合C++的精神。
有沒有要求有效,如果是的話,背後的原因是什麼?
打我。謹慎自己挖掘一些論點?
相關問題
- 1. Action/Lambda表達式內存管理問題
- 2. Lambda捕獲和內存管理
- 3. lambda表達式和異常處理
- 4. 整理lambda表達式
- 5. 帶內部Lambda表達式的Lambda表達式
- 6. Lambda表達式和存儲過程
- 7. C++中lambda的內存管理11
- 8. lambda表達式和的putIfAbsent
- 9. Lambda表達式和搜索
- 10. Lambda表達式和RVO
- 11. 謂詞和lambda表達式
- 12. C#Lambda表達式和NHibernate
- 13. lambda表達式和詞典
- 14. Proguard的和lambda表達式
- 15. Lambda表達式和InvokeOperation
- 16. @PrepareForTest,@RunWith和lambda表達式
- 17. Delegate.Combine和lambda表達式
- 18. C#lambda表達式和IComparer
- 19. Lambda表達式
- 20. Lambda表達式
- 21. Lambda表達式
- 22. Lambda表達式
- 23. Lambda表達式
- 24. Lambda表達式
- 25. Lambda表達式
- 26. Lambda表達式
- 27. Lambda表達式
- 28. lambda表達式
- 29. Lambda表達式()
- 30. lambda表達式
我認爲它是_functor_或_function object_(而不是_functor object_),但是你有我的投票。 – sbi 2010-05-22 08:28:09
謝謝@sbi。我修改它來說明我的意思。 – 2010-05-22 08:37:55
問題在於lambda表達式在捕獲時不太明確,特別是如果您使用泛型「通過引用捕獲所有內容」形式:[&]。在構建仿函數時,必須明確地傳遞「捕獲」變量。但是,lambda是一個局部變量,不應該被允許像其他局部變量一樣被允許逃避它的範圍。 – 2010-12-01 18:09:51