【发布时间】:2018-03-12 19:34:54
【问题描述】:
我有一个类,其中包含 std::vector 之类的
struct Mystruct
{
Mystruct(const std::vector<int>& w): v(w)
{
std::cout << "Copy constructor :" << v.at(0) << "\n";
}
Mystruct(const std::vector<int>&& w): v(w)
{
std::cout << "Move Constructor :" << v.at(0) << "\n";
}
private:
std::vector<int> v;
};
我会创建类似的对象
int main()
{
auto x = std::vector<int> {1,2,3};
Mystruct M1(x);
Mystruct M2(std::vector<int> {3,2,1});
return 0;
}
M1 是使用复制构造函数构造的,M2 是使用“move”构造函数构造的,但是在 gdb 中运行时,两个分配都为 v 和 w 保留不同的地址,如果我使用 v (std::move( w)) 在第二个构造函数的初始化列表中。所以我猜这两个赋值都在复制 w 的内容,这是正确的吗?如果是这种情况,我该如何移动 w 的内容而不是复制它们
【问题讨论】:
-
“移动”部分指的是资源,而不是对象本身。
-
看看地址
v.data()。
标签: c++ copy-constructor move-constructor