使用make_unique和emplace_back的简单结构

时间:2016-07-12 07:51:29

标签: c++ unique-ptr emplace

给出一个结构:

struct S {
    int x;
    int y;
}

为什么标准允许我们这样做:

std::vector<S> vec;
vec.emplace_back(1, 2);

但不允许这样做:

auto ptr = std::make_unique<S>(1, 2);

3 个答案:

答案 0 :(得分:7)

实际上都没有工作。

决定C ++ std中的emplace样式构造函数将构造为()而不是{} s。没有强烈的理由选择这个(我知道)。

emplace_alt snd make_unique_alt可以添加到使用std构建的{}。 (自然应该选择一个更好的名字)

所以简短的回答是“因为std这么说”。中等答案是“这是std几乎任意选择,其他地方一致”。很长的答案将涉及到它发生的房间和重新审视的地方:这不是一个很长的答案。

答案 1 :(得分:4)

请检查您的代码。

在cpp14中,您的示例代码无法编译:https://ideone.com/ewyHW6

server_timestampmake_unique都在后台使用emplace_back,因此无论是两者还是无人都会编译。

答案 2 :(得分:0)

怎么样

auto ptr = std::make_unique<S>( S{1, 2} );

不使用参数定义额外的构造函数。