C++ 0x'daki Lambda İfadeleri/Kapanışları C++'daki bellek yönetimini nasıl karmaşıklaştırıyor? Neden bazı insanlar kapanışların manuel bellek yönetimi ile dillerde yer olmadığını söylüyor? İddiaları geçerli midir ve eğer evet ise, arkasındaki sebepler nelerdir?Lambda İfadeleri ve Bellek Yönetimi
cevap
Lambda'lar onlar oluşturulan bağlamı daha uzun yaşamak olabilir. Lambda sonra erişmek istediğinde, onlar artık yok, çünkü referans olarak Cilt serbest değişkenler, daha sonra bir sorun olabilir. Bu, "yerel değişkenleri referans ile döndürme" şeklindedir.
Bu tür argümanlar kırmızı bir ringa balığıdır. Evet, lambdaların uğraşmak için bellek yönetimi sorunları var, ama bir lambda temelde üye değişkenleri olan bir işlev nesnesi (functor) gibidir. Bir funker'in uğraşması gereken konular ne olursa olsun, bir lambda da uğraşmak zorundadır. C++ 0x lambda, hangi nesnelerin yakalanacağına ve değere veya referansa göre mi olacağına karar verme imkanlarına sahiptir. Bu, bir functor nesnesindeki değerleri ve referansları depolamaya benzer.
C++ 0x'daki Lambda İfadeleri/Kapanışları C++'daki bellek yönetimini nasıl karmaşıklaştırıyor?
Onlar? Onlar sadece işlev nesneleri yaratmak için sözdizimsel şekerdir. Daha önce hiç görmediğimiz bir şey yok. Sadece şimdi, anında bunları oluşturmak için kısa bir sözdizimimiz var.
Bazı insanlar neden kapanmaların manuel bellek yönetimi ile dillerde yer olmadığını söylüyor?
Muhtemelen onlara sormalısınız. C++ 0x lambda yaklaşımını oldukça zarif ve düşük seviyeli buluyorum. C++ ruhuna uyar.
Talep geçerli midir ve eğer evet ise, bunun nedenleri nelerdir?
Beats me. Bazı argümanları kendiniz bulmaya mı dikkat ediyorsunuz?
Sanırım ya _functor_ ya da _function object_ (ve _functor object_ değil), ama yine de benim oy hakkım var. – sbi
Teşekkürler @sbi. Ne demek istediğimi söylemek için değiştirdim. –
Sorun, lambdaların, özellikle jenerik "referans olarak her şeyi yakala" formunu kullanıyorsanız, yakalamalarında daha az açık olmalarıdır: [&]. Bir functor oluştururken, "yakalanan" değişkenleri açıkça iletmelisiniz. Ama lambda yerel değişkendir ve bu şekilde tıpkı diğer yerel değişkenler gibi, kapsamını kaçmasına izin verilmemelidir doğrudur. –