class position final {
private:
std::shared_ptr<std::unordered_map<position, int>> history;
int x;
public:
bool operator==(const position& other) const; // compares x, ignores history
position(int);
set(int);
}
position::set(int x_) { x=x_;}
position::position(int) {
x=0;
history.make_shared({*this,0});
}
我构造了一个位置对象,该对象创建指向新地图的智能指针。
复制位置时,复制将指向同一张地图。当没有位置指向此地图的左侧时,智能指针将在地图上调用其析构函数。
然后我可以初始化几个指向不同地图的位置,而不必担心内存管理。
作品中的扳手是我希望这张地图具有位置类型的键,但此段错误。
出了什么问题?
不知何故,地图被删除了,我最终试图将对象插入nullptr。
我觉得我唯一的选择是让历史超出对象封装范围或使用new。这两种方法都可以,但是我正在寻找更优雅的解决方案。