2015-10-09 32 views
8

Paylaşılan kapatma payının shared_ptr tarafından yönetilmesi için kullanılan sözdizimi nedir. Fonksiyonlara kapanmak ve nullptr geçebilmek istiyorum. Bir shared_ptr< ::std::function<void()> kullanarak gibi görünüyor ama lambda anlatımdaC++ 11 kapatma shared_ptr

cevap

5

o başlatmak için sözdizimi bilemiyorum Aslında sen function beri gerek shared_ptr, nullptr inşa edilebilir bir şey olabilir

auto lambda = []() { /* do something usefull */ }; 
auto p = std::make_shared<std::function<void()>>(lambda); 

gibi Ama olmalıdır.

std::function<void()> fnc(nullptr); 
4

Genel olarak,nesnesini aracılığıyla shared_ptr<X> aracılığıyla oluşturmak ve nesnesini kullanarak nesne oluşturmak. Sonra genellikle bunu kodları durumda

auto ptr = make_shared<X>(someY); 

olduğunu Xstd::function türüdür ve someY senin lamda olduğunu. Bunu aldıktan sonra, oldukça basittir:

auto funPtr = std::make_shared<function<void()>>([](){ std::cout << "Hello World!\n"; }); 
(*funPtr)(); 
0

İşlev nesnesinin içinde shared_ptr'yi tercih ederim.

auto o = make_shared<MyData>(); 
return [o]() 
{ 
    ... 
}; 

Yani, kapatılması için veri yığın ve sap kopyalanabilir ve çevresinde geçirilebilir ise ref-saydı. Son tutamaç yok olduğunda veriler temizlenir.