c++ - "this"指针和容器

标签 c++ entity-framework pointers containers

对于我的游戏,我构建了一个小型框架,其中包括:

  • 拥有组件的实体。
  • 保存指向实体的指针的系统。
  • 拥有系统的引擎。
  • 拥有实体的 EntityManager。

每次我添加一个组件时,实体都会通过它持有的引擎指针将它的“this”指针传递给系统,然后它们决定是注册还是忽略它。

现在,由于实体是 EntityManager 容器的元素,我是否正确地假设如果对它的插入操作导致移位或重新分配,系统将不再持有有效指针?

如果是这样,什么是可以用来防止这种情况发生的好容器?如果我理解正确的话,这类似于迭代器发生的情况,并且在要求插入非无效时应该应用相同的规则。

最佳答案

如果您存储一个实体 vector ,然后只存储它们的迭代器以访问它们:是的,重新分配可能会使您的所有数据无效。

建议的方法是存储指针 vector (如果您需要内存收集功能,您可能希望使用智能指针 vector )。这样,无论容器空间的重新分配如何,您都可以确保每次插入/删除时指针都是有效的(假设没有其他东西触及对象)。

如果您只是将对象而不是指针存储在容器中,则问题尚不清楚,但建议:将元素插入容器时,如 with

std::vector<T>::push_back()

您正在存储对象的拷贝。这通常是不可取的,因为会带来额外的复制开销,并且如果设置不当可能会产生问题。请参阅“浅拷贝”和“深拷贝”以了解有关此问题的更多信息。

关于c++ - "this"指针和容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23583933/

相关文章:

c++ - G++ 动态库链接问题

c++ - 将字符串转换为 C 风格的字符串并检测空终止字符

asp.net - 如何在 Entity Framework 中添加表?

visual-studio - 使用 Visual Studio Entity Framework 和 C# 序列化/反序列化 sqlite 数据库

c - 如何获取 C 指针的物理地址作为值?

objective-c - 指向 nil 的指针会与 NULL 匹配吗?

C++ 随机数检查非常小的概率

entity-framework - 您如何确保首先对 EF 代码中的表关系启用级联删除?

c++ - 获取错误 C2440 : char[]* to char* (pointers)

c++ - 在C++中交换短语中单词的前两个字母