当指针指向的对象被另一个实例删除时重新分配指针 class

Reassigning a pointer when the object it is pointing to is deleted by an instance of another class

我正在创建一个塔防游戏模型,其中敌人在被摧毁之前试图穿过屏幕。

指向动态分配的 Enemy 对象的指针存储在 EnemyManager class 内的向量中,该向量控制 EnemyManager 如何生成和消失。当 Enemy 的生命值达到零时,EnemyManager 使用 delete 删除它,并且 erase 指针。

我有一个 BulletTower 对象,用于锁定单个敌人并射击直到它被摧毁,然后锁定另一个。这需要一个指向 Enemy 对象的指针,但如果 Enemy 死亡并被 EnemyManager 删除,则指针悬空。

指针似乎无法判断被锁定的敌人是否被摧毁。我研究了智能指针,但似乎共享指针不起作用,因为当敌人的生命值达到零时会被手动删除。

Weak pointer 也许可以胜任。

此外,您可以提供一个函数或对象,而不是提供指向 BulletTower 的 Enemy 指针,该函数或对象将 return 当前锁定的敌人(如果还活着),或者 return 一个新的。

您可以将指向实际 Enemy 对象的指针存储在变量中。并有一个指向 BulletTower 对象的指针变量的指针。当 Enemy 被杀死时,EnemyManager 可以将变量更改为 nullptr 并且 BulletTower 对象可以通过它拥有的指针来检查这个事实。

所以本质上,BulletTower 锁定到指针变量,而不是直接锁定到 Enemy 对象。

统计有多少 BulletTower 个对象已锁定到 Enemy。不要删除 Enemy,除非该计数已变为 0。对于 BulletTower,当能量变为 0 时解除锁定并减少锁定计数。