10

In che modo le espressioni/chiusure Lambda in C++ 0x complicano la gestione della memoria in C++? Perché alcune persone dicono che le chiusure non hanno posto nelle lingue con gestione manuale della memoria? La loro richiesta è valida e se sì, quali sono le ragioni alla base?Lambda Expressions and Memory Management

risposta

10

Lambdas può sopravvivere al contesto in cui sono stati creati. Associare variabili libere per riferimento può essere un problema, quindi, quando i lambda vogliono accedervi in ​​seguito, potrebbero non esistere più. È semplicemente "Non restituire variabili locali per riferimento" sotto mentite spoglie.

15

Tali argomenti sono una falsa pista. Sì, lambda ha problemi di gestione della memoria da affrontare, ma un lambda è fondamentalmente come un oggetto funzione (functor) con variabili membro. Qualunque problema debba affrontare un funtore, anche un lambda deve occuparsene. I lambda C++ 0x hanno le strutture per decidere quali oggetti catturare e se dovrebbe essere per valore o per riferimento. Questo è analogo alla memorizzazione di valori e riferimenti in un oggetto funtore.

+1

Penso che sia _functor_ o _function object_ (e non _functor object_), ma avete comunque il mio voto. – sbi

+0

Grazie @sbi. L'ho modificato per dire cosa intendevo. –

+0

Il problema è che i lambdas sono meno espliciti nella loro cattura, specialmente se si utilizza il modulo generico "cattura tutto per riferimento": [&]. Quando costruisci un functor, devi passare esplicitamente le variabili "catturate". Ma è vero che lambda è una variabile locale e come tale non dovrebbe essere permesso di sfuggire al suo ambito, proprio come qualsiasi altra variabile locale. –

2

In che modo le espressioni Lambda/Chiusure in C++ 0x complicano la gestione della memoria in C++?

Fanno? Sono solo zucchero sintattico per la creazione di oggetti funzionali. Niente che non abbiamo mai visto prima. Solo ora abbiamo una sintassi breve per la creazione di quelli al volo.

Perché alcuni dicono che le chiusure non hanno posto nelle lingue con gestione manuale della memoria?

Probabilmente dovresti chiedere loro. Trovo l'approccio lambda C++ 0x piuttosto elegante e di basso livello. Si adatta allo spirito del C++.

C'è una richiesta valida e se sì, quali sono le motivazioni alla base?

Mi batte. Ti va di carpire qualche argomento tu stesso?