如何将const weak_ptr放入STL容器中
How to put a const weak_ptr into a STL container
我有一个类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的智能指针。因此,我想使向量内部的指针const:
class Map {
private:
std::vector<const std::weak_ptr<const Tile>> tiles;
}
不幸的是,不可能将const对象放入STL容器中。
有人知道解决方案吗?也许是完全不同的设计?
存储在vector
中的元素不能是const
,因为它们必须是可赋值的。vector
能够以任何可观察的方式"操纵"指针的唯一方法是破坏到给定对象的最后一个weak_ptr
,这将导致对应shared_ptr
的控制块被释放(假设没有其他shared_ptr
仍然引用它)。
简而言之,您可以安全地将非const
的weak_ptr
存储在向量中。
如果可能,您可以使用std::set
。由于从集合访问数据的唯一方法只提供常量引用或常量迭代器,因此无法直接操作这些值。
要做到这一点,你可以使用
CCD_ 10。
另一种非技术性的解决方案是通过设计来实现,因为它可能是你的类的私人成员:只需在你的类设计中说"不要重置或覆盖弱指针"。
相关文章:
- 将一系列整数放入类的最佳方法是什么?
- 如何在 c++ 中比较 2 个链表并将匹配的数据放入另一个链表中
- 获取 QInputEvent 在 Qt 4.8 中被放入 QEventLoop 队列时的时间戳
- 在将字符串放入字符串向量时遇到问题?
- 输入验证将数字放入向量中
- 有什么方法可以将具有不同模板参数的模板类实例放入向量中?
- 如何在 EOF 之前从文件中读取并将其放入字符串中?
- 我可以将新的 std::tuple 放入内存映射区域,并在以后读回吗?
- 将对象放入地图后打印对象
- C++ - 是否将常量幻数放入命名空间
- 如何在C++中将可调用对象放入地图中?
- 如何在 c++ 的 toString 方法中使用 setw(x) 并将其放入变量或建议中?
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- C++:有效地将Sha256摘要放入OpenSSL Bignum?
- 我觉得我放入结构中的输入代码可以压缩,关于如何在保持代码简短的同时保持数据个性化的任何建议?
- 如何获取C++中的输入并将其"split"到列表中?换句话说,取 N 个输入并放入 N 长度的数组中
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- 如何将const weak_ptr放入STL容器中
- 将派生类作为值放入STL映射中
- 无法在 C++ 中将 STL push_back() 派生类放入 STL 列表中