Come posso rilevare una variabile membro in base al valore quando si utilizzano espressioni lambda C++ 11?membro di cattura variabile per valore
L'utilizzo della sintassi [my_member]
non sembra funzionare e l'acquisizione implicita utilizza il puntatore this
. Quello che serve è un modo per specificare esplicitamente il tipo di cattura delle variabili membro. È possibile?
mio soluzione per ora è:
void member_function()
{
std::shared_ptr<my_member_class> my_member_copy = my_member; // this shouldn't be necessary
std::async([=]{ std::cout << *my_member_copy; });
// std::async([=]{ std::cout << *my_member_; }); // wrong, my member could be potentially out of scope
}
Ho bisogno di acquisire per valore inorder per il conteggio ref di shared_ptr da incrementare. Altrimenti l'oggetto verrà distrutto quando l'oggetto genitore viene distrutto, causando così una potenziale violazione di accesso nell'operazione asincrona. (ho dimenticato di aggiungere * nel lambda). Non vedo come il tuo esempio differisce dal mio. – ronag
"Non sapendo che tipo il tuo membro è qualcosa del genere dovrebbe funzionare:", il motivo per cui ho scritto std :: shared_ptr invece di auto era esplicito riguardo al tipo di "my_member", cioè shared_ptr. –
ronag