我有一個簡單的代碼:LAMBDA捕獲列表和複製
#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;
}
而且它調用拷貝構造函數2次,我想把它只有一次。我知道我可以在這個簡化的例子中使用auto,但是我需要將它存儲以備稍後使用,所以auto不是選項。 而我的問題:有沒有一種方法來存儲lambda =捕獲列表,並只有一個捕獲的對象的副本?
我很驚訝的情況下被複制,爲您塑造功能實際上並沒有被調用。你使用什麼編譯器和版本? –
@JoachimPileborg:當然有兩個副本:一個將'copy'複製到lambda中,另一個將lambda(具有'Copy'成員)複製到'std :: function'中。 – Mankarse