小编pot*_*tuz的帖子

c ++ copy constructor vs std :: vector的move构造函数

我有一个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;
};
Run Code Online (Sandbox Code Playgroud)

我创建像这样的对象

int main() 
{
  auto x = std::vector<int> {1,2,3};
  Mystruct M1(x);
  Mystruct M2(std::vector<int> {3,2,1});
  return 0; 
}
Run Code Online (Sandbox Code Playgroud)

M1使用复制构造函数和M2使用"移动"构造函数构造,但是在gdb中运行时,两个分配都为v和w保留不同的地址,如果我在初始化列表中使用v(std :: move(w)),则会发生同样的情况.第二个构造函数.所以我猜两个人都在复制w的内容,这是正确的吗?如果是这种情况,我怎样才能移动w的内容而不是复制它们

c++ copy-constructor move-constructor

4
推荐指数
1
解决办法
3656
查看次数

标签 统计

c++ ×1

copy-constructor ×1

move-constructor ×1