我有一个 TileManager 类来管理对象的生命周期,因此对它们持有一个 shared_ptr:
class TileManager {
private:
std::vector<std::shared_ptr<const Tile>> tiles;
}
现在我有另一个 Map 类,它包含对 TileManager 管理的对象的非拥有引用:
class Map {
private:
std::vector<std::weak_ptr<const Tile>> tiles;
}
我的问题是:我不希望 Map 类能够操纵指向 Tile 的智能指针。因此,我想使 vector 内部的指针为常量:
class Map {
private:
std::vector<const std::weak_ptr<const Tile>> tiles;
}
遗憾的是,无法将 const 对象放入 STL 容器中。
有人知道解决办法吗?也许是完全不同的设计?
最佳答案
存储在vector
中的元素不能是const
,因为它们必须是可赋值的。 vector
可以以任何可观察的方式“操纵”指针的唯一方法是销毁给定对象的最后一个 weak_ptr
,这将导致相应对象的控制 block shared_ptr
将被释放(假设没有其他 shared_ptr
仍然引用它)。
简而言之,您可以安全地将非const
weak_ptr
存储在 vector 中。
关于c++ - 如何将 const weak_ptr 放入 STL 容器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13100300/