【发布时间】:2014-08-26 06:20:51
【问题描述】:
考虑以下代码:
struct foo {
std::string id;
};
int main() {
std::vector<foo> v;
{
foo tmp;
v.push_back(std::move(tmp));
}
}
在演示的这段代码中:
- 将调用类
foo的默认构造函数来构造对象tmp。 -
foo类的移动构造函数将在语句v.push_back(std::move(tmp));中调用。 class foo的析构函数将被调用两次。
问题:
- 为什么移动对象的析构函数被调用两次?
- 真正从正在移动的对象中移动了什么?
【问题讨论】:
-
被移动的对象只被破坏一次。每个对象都创建一次,销毁一次。两个析构函数调用是针对
tmp和向量中的对象。