gpt4 book ai didi

c++ - 对象引用的 vector

转载 作者:IT老高 更新时间:2023-10-28 22:34:08 27 4
gpt4 key购买 nike

具有对象引用的 vector 是否合法,如下所示?

vector<Agent&> seenAgents;

例如,哪些会被场景中的一些但不是所有的对象填充?

我有一个 Agent 对象的 vector ,但上面概述的 vector 应该只包含对每个代理当前可以看到的对象的引用 - 这意味着这些引用将一直被添加和删除。

这是语言允许的吗?此外,我还有什么需要注意的吗?如果我从 vector 中删除一个引用,它会在任何地方持续存在吗?是内存泄漏吗?

我似乎在声明 vector 的那一行遇到了这个错误:

error C2528: 'pointer' : pointer to reference is illegal

这是直接与线路有关还是很可能发生在其他地方?它在构造函数初始化列表中被初始化,如下所示:

seenAgents(vector<Agents&>())

最佳答案

你不能有 vector 的引用,因为引用不是 copyable 可分配的,并且 所有 STL 容器应该存储 可复制 可分配项目。

但是你可以让容器保存指针。像这样:

vector< Agents* > seenAgents;

这有点危险。您需要确保这些指针将保持有效。我的意思是——如果有人删除了一个由这个容器中的指针指向的对象,那么指针就会变得无效。你需要确保这不会发生,因为你不能检查它(你不能检查 NULL,因为指针不会变成 NULL,如果有人删除了指向的对象)。

这里最好的解决方案(由带有指针的容器提供)是使用一些智能指针——例如,一些带有引用计数;他们将向您保证该对象将存在并且该指针是有效的。如果智能指针指向的对象被破坏,您可以检查它是否存在 NULL

关于c++ - 对象引用的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8200701/

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