簡體   English   中英

C ++ 11閉包shared_ptr

[英]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);

在你的情況下, Xstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM