【发布时间】:2023-03-03 18:02:01
【问题描述】:
谁能给我解释一件事。从一方面来看,move constructor 旨在通过消除不必要的从另一侧复制对象来优化内存和处理器的使用,但几乎在任何将要使用move constructor 的地方,编译器都会使用copy elision,禁用move ctor?不合理吗?
【问题讨论】:
-
“几乎所有要使用移动构造函数的地方,编译器都使用复制省略”——这完全错了。 (例如,尝试通过右值引用将右值插入容器。)
-
@Derek81 您必须通过minimal reproducible example 来支持您的声明。
-
“移动构造函数”也可以称为“rvalue构造函数”。
-
@Derek81 还有很多不是的。
-
@Derek81 执行 ctor + 复制省略,而不是 ctor + move 构造函数更便宜。如果可能,为什么编译器不应该这样做?移动构造创建一个新对象,旧对象的数据被“移动”(在最坏的情况下,如果源对象的所有数据都完全包含在其中,它与常规对象一样昂贵)复制)只有当你有可以像指针一样交换的成员变量或支持交换的容器(或者如果你想让对象不复制而只能移动)时,移动构造函数才比复制构造函数受益。
标签: c++ constructor move-semantics copy-elision