gpt4 book ai didi

c++ - 为什么编译器接受这个删除的 move 构造函数?

转载 作者:行者123 更新时间:2023-11-30 03:20:04 25 4
gpt4 key购买 nike

在下面的代码示例中,我没有特别的理由删除 move 构造函数,但我不明白它为什么编译(x 是一个打印它是被 move 还是被复制的对象) .

class foo {
X x;

public:
foo()=default;
foo(const foo &)=default;
foo(foo &&)=delete;
};

int main()
{
vector<foo> v;
foo a;

v.push_back(a);
v.push_back(a);
}

第二次在 std::vector 上调用 push_back 时,它会重新定位已经存在的对象,通常使用 move 操作。使用声明为“默认”的 foo move 构造函数,我可以看到这种情况发生。

但是,当显式删除 move 构造函数时,我预计编译会失败,因为它仍然可用于重载,但已删除。
它确实编译并且 vector 重新分配使用复制构造函数。

这里发生了什么?

最佳答案

std::vector::resize() 如果可以的话会 move ,如果必须的话会复制。这非常有用,因为并非所有可复制类型都是可 move 的。请记住,在 C++ 中,对象是值类型,而不是引用类型。

关于c++ - 为什么编译器接受这个删除的 move 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53136612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com