如果我删除了复制构造函数,我是否没有隐式移动构造函数?

时间:2014-11-07 14:09:36

标签: c++

以下不会编译(尝试过clang& gcc)

#include <vector>

struct Foo
{
    Foo(int a=0) : m_a(a) {}
    Foo(const Foo& f) = delete;
    // Foo(Foo&& f) = default;
private:
    int m_a;
};

int main()
{
    std::vector<Foo> foovec;
    foovec.emplace_back(44); // might resize, so might move
}

但是如果我不删除复制构造函数,或者我默认移动构造函数,则 它会工作。那么,删除复制构造函数是否会抑制移动构造函数,
背后的理性是什么?

1 个答案:

答案 0 :(得分:7)

您应该看到有关特殊班级成员的表格。将复制构造函数设置为已删除时,将不会自动生成移动构造函数。

请参阅表格中的更多内容:

enter image description here

Source (slides)