其他分享
首页 > 其他分享> > c – 在地图中插入对象而不复制对象

c – 在地图中插入对象而不复制对象

作者:互联网

如果对象的类已禁用复制构造函数和禁用的复制操作符,是否可以在映射中插入对象?移动语义在这里有用吗?

#include <map>

class T {
public:
  T(int v): x(v) {};
private:
  T(const T &other); // disabled!
  T &operator=(const T &other); // disabled!
  int x;
};

int main() {
  std::map<int, T> m;
  m[42] = T(24);  // compilation error here!
}

编辑我还不完全清楚.对象很大,所以我不想制作不必要的副本.但我可以修改类的代码(也许我需要实现移动语义?)而不是用户代码(示例中的主要功能).

解决方法:

这可能是您正在寻找的:

class T {
public:
  T(){};
  T(int v): x(v) {};
  T(const T &other) = delete;
  T(T&& other) {x = other.x; std::cout << "move ctor\n";}
  T &operator=(const T &other) = delete;
  T& operator=(T&& other) {x = other.x; std::cout << "move assigment\n";}
 private:
  int x;
};

int main() {
  std::map<int, T> m;
  m.insert(std::make_pair(42, T(24))); 
  m[44] = T(25);
}

标签:c,move-semantics
来源: https://codeday.me/bug/20190829/1759678.html