Lambda capture clause



  • Hi,
    kann man nicht einfach [&] schreiben, anstatt die Variablen aufzulisten? Oder ist das weniger performant (compile/runtime?)?.

    In einer Klasse:

    // link, context sind Pointer
    auto Failed = [this, link, context]()
    {
    	Disconnect(link);
    	link->Release();
    
    	delete context;
    };
    

    Einfacher wäre halt [&], und hätte in diesem Fall denselben Effekt.



  • Einfacher ist das schon, kannst du ja auch machen.
    Ich denke nicht, dass das Einfluss auf die Performance hat, dennd er Compiler wird sich nur die Daten in den Lambda-Ausdruck holen, die dort auch gebraucht werden.

    Das Problem ist (nur), dass du auch aus versehen Daten ändern könntest, die du nicht ändern willst.



  • [&] würde alles per Referenz fangen, das halte ich aber für Unfug, weils eh schon Zeiger sind. Ich würde [=] machen, wenn ich schreibfaul wäre. Ich mache aber lieber [this, link, context], dann kommen keine Überraschungen, wenn ich mal an der Klasse was ändere.

    Zusatzfrage, willste nicht nur [this] fangen und sind mit link und context nur this->link und this->context gemeint? Das wäre hübsch.



  • Okay, danke.
    Ne, in dem Fall sind die Pointer auto.


Anmelden zum Antworten