gpt4 book ai didi

c++ - 如何将 const weak_ptr 放入 STL 容器中

转载 作者:行者123 更新时间:2023-11-30 01:24:56 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com