如何在lambda函数中避免隐式移动构造函数

时间:2016-01-20 08:37:12

标签: c++ c++11 lambda emplace

我使用“emplace”方法来避免内存复制。 但是,当我在Lambda函数中使用“emplace”时。它总是调用隐式移动构造函数。 如何在Lambda函数中避免内存复制? 此示例程序不应打印“我正被移动。”

CopyDirectory

1 个答案:

答案 0 :(得分:6)

它不是关于lambda函数,而是关于重新分配其内存的向量。您可以使用std::vector::reserve修改此内容。

int main() {
    g_a.reserve(10);
    ^^^^^^^^^^^^^^^^
    std::cout << "emplace_back:\n";
    g_a.emplace_back(1);

    std::cout << "emplace_back in lambda:\n";
    auto f1 = [](int x) { g_a.emplace_back(x);  };  
    f1(2);

    std::cout << "\nContents: ";
    for (A const& t : g_a) 
        std::cout << t.a << " ";
    std::cout << std::endl;
}

Live Demo