【发布时间】:2019-05-23 02:37:46
【问题描述】:
正如您在输出中看到的那样,向量pre 的对象不仅“移动”到了向量post,而且还保留了它们在内存中的原始地址空间。此举背后的真正原因是什么?这种行为是预期的吗?假设我需要一个单独的指向这些对象的指针向量,是否可以安全地假设在此移动之后对象将始终具有其原始地址?
实际上,我有一个类,其中包含一个像这样的向量和我提到的作为成员的指针向量。我还删除了复制 ctor,并为班级定义了移动。
#include <iostream>
#include <vector>
struct B {
int val = 0;
B(int aInt) : val(aInt) { };
};
int main() {
std::vector<B> pre;
pre.push_back(B(1));
pre.push_back(B(2));
std::cout << "pre-move:\t" << (void*)&pre.at(0) << '\n';
std::cout << "pre-move:\t" << (void*)&pre.at(1) << '\n';
std::vector<B> post(std::move(pre));
std::cout << "post-move:\t" << (void*)&post.at(0) << '\n';
std::cout << "post-move:\t" << (void*)&post.at(1) << '\n';
return 0;
}
输出:
pre-move: 0x1d7b150
pre-move: 0x1d7b154 <------|
post-move: 0x1d7b150 |
post-move: 0x1d7b154 <------|
【问题讨论】:
标签: c++ c++11 vector move-semantics