[英]C++11 closure shared_ptr
通過shared_ptr創建堆分配閉包管理的語法是什么。 我想將閉包傳遞給函數並能夠傳遞nullptr。 看起來像使用shared_ptr< ::std::function<void()>
但是我無法想象從lambda表達式初始化它的語法
應該是這樣的
auto lambda = []() { /* do something usefull */ };
auto p = std::make_shared<std::function<void()>>(lambda);
但實際上你可能不需要shared_ptr
,因為函數可以從nullptr
構造。
std::function<void()> fnc(nullptr);
一般來說,你想通過make_shared
創建一個shared_ptr<X>
,用一些Y
對象初始化X
對象。 那么通常代碼就是這樣做的
auto ptr = make_shared<X>(someY);
在你的情況下, X
是std::function
類型, someY
是你的lambda。 一旦你擁有了它,它就非常直接:
auto funPtr = std::make_shared<function<void()>>( [](){ std::cout << "Hello World!\n"; } );
(*funPtr)();
你可以用兩種方式做到:
std::function<void()> lambda = [](){};
auto heapPtr = std::make_shared<std::function<void()>>(lambda);
auto heapPtr2 = new std::function<void()>(lambda);
您可能還會發現以下問題非常有用:
我更喜歡將shared_ptr放在函數對象中。
auto o = make_shared<MyData>();
return [o] ()
{
...
};
因此,閉包的數據在堆上並重新計數,同時可以復制和傳遞句柄。 當最后一個句柄被銷毀時,數據被清除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.