J'ai un code simple:liste de capture Lambda et la copie
#include <iostream>
#include <functional>
struct Copy
{
Copy(){}
Copy(const Copy&)
{
std::cout << "Copied!\n";
}
};
int main()
{
Copy copy;
std::function<void()> func = [=]{(void)copy;};
return 0;
}
Et il appelle 2 fois la copie cteur et je veux avoir qu'une seule fois. Je comprends que je peux utiliser l'auto dans cet exemple simplifié, mais j'ai besoin de le stocker pour une utilisation ultérieure, donc auto n'est pas une option. Et ma question: est-il un moyen de stocker lambda avec = liste de capture et avoir une seule copie des objets capturés?
Je suis surpris l'instance est copiée, comme la fonction que vous créez ne soit pas réellement appelé . Quel compilateur et quelle version utilisez-vous? –
@JoachimPileborg: Bien sûr, il y a deux copies: l'une pour copier 'copy' dans le lambda, et l'autre qui se produit quand le lambda (qui a un membre' Copy') est copié dans la fonction 'std :: function'. – Mankarse