C++20 implicit this capture

C++20 standartları this göstericisinin örtülü (implicit) olarak yakalanmasını “deprecated” olarak belirliyor. C++23 standartları bu özelliği dilden tamamen kaldırılabileceğinden kullanmamakta fayda var. Aşağıdaki koda bakalım:

Nec sınıfının func üye işlevi içinde kullanılan lambda ifadesinde sınıfın mx isimli veri öğesinin kullanıldığını görüyorsunuz. Burada yakalanan (capture edilen) edilen mx veri öğesi değil this göstericisi. Yani mx kapanış (closure) sınıfının bir veri öğesine kopyalanmıyor. Kod içinde kullanılan mx, veri öğesinin ta kendisi. (this->mx). Aşağıdaki kod bunu göstermeye yönelik:

Kodu çalıştırdığınızda nec isimli nesnenin mx öğesinin değerinin değiştiğini göreceksiniz.
this göstericisinin bu şekilde örtülü olarak yakalanması bir kopyalama söz konusu olduğunu düşünen programcıları zor duruma düşürebiliyor. Aşağıdaki koda bakalım:

C++17 standartları ise this göstericisinin referansla yakalanmasının yanında hem de kopyalama yoluyla isimle (explicit) yakalanmasını mümkün kıldı:

this göstericisinin örtülü olarak referans semantiği ile yakalanmasında ise C++20 standartları bir değişiklik getirmedi.

Kaynak : C++20 Deprecate implicit lambda capture of this

Share

Necati Ergin

C ve Sistem Programcıları Derneğinde eğitmen olarak çalışıyor.

Bunlar da ilginizi çekebilir

Kod Eklemek İçin Okuyun
Eklemek istediğiniz kodları lütfen aşağıdaki “pre” kodları arasında yazınız.
<pre class="lang:c++ decode:true ">
--yazacağınız kodlar--
</pre>
(buradan kopyalayarak kullanabilirsiniz)