请考虑以下代码片段:
struct foo {
std::string id;
};
int main() {
std::vector<foo> v;
{
foo tmp;
v.push_back(std::move(tmp));
}
}
在所示的代码中:
- 将调用类
foo
的默认构造函数来构造对象tmp
。 - 语句
v.push_back(std::move(tmp));
将调用类foo
的移动构造函数。 class foo
的析构函数将被调用两次。
问题:
- 为什么已移动对象的析构函数会被调用两次?
- 被移动的对象到底是什么?
tmp
和向量中的对象的。 - M.M