【发布时间】:2012-12-27 11:47:41
【问题描述】:
我很惊讶这没有出现在我的搜索结果中,考虑到 C++11 中移动语义的有用性,我想有人会问过这个问题:
我什么时候必须(或者对我来说是个好主意)在 C++11 中使一个类不可移动?
(原因其他不是与现有代码的兼容性问题。)
【问题讨论】:
-
boost 总是领先一步——“昂贵的移动类型”(boost.org/doc/libs/1_48_0/doc/html/container/move_emplace.html)
-
@SChepurin:“搬家太贵”不是很清楚......我的意思是,如果某物对您的用例来说太贵了,那么您可能应该避免它,无论是在现实生活中还是在现实生活中编程或游戏中:-) 它没有告诉我任何我不知道的东西。
-
我认为这是一个非常好的和有用的问题(
+1来自我),Herb(或他的双胞胎,as it seems)给出了非常彻底的回答,所以我将其作为常见问题解答条目。如果有人反对,请在the lounge ping 我,所以可以在那里讨论。 -
AFAIK 可移动类仍然可以进行切片,因此禁止所有多态基类(即所有具有虚函数的基类)的移动(和复制)是有意义的。
-
@Mehrdad:我只是说“T 有一个移动构造函数”和“
T x = std::move(anotherT);合法”是不等价的。后者是一个移动请求,如果 T 没有移动 ctor,它可能会退回到复制 ctor。那么,“可移动”究竟是什么意思?
标签: c++ c++11 move-semantics c++-faq