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

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

本文关键字:指针 新分配 分配 实例 对象 另一个 删除      更新时间:2023-10-16

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

指向动态分配的 Enemy 对象的指针存储在 EnemyManager 类内的向量中,该类控制它们的生成和取消生成方式。当敌人的生命值达到零时,敌人管理器会使用delete删除它,并erase指针。

我有一个子弹塔对象,它旨在锁定一个敌人并射击直到它被摧毁,然后锁定到另一个敌人。这需要一个指向敌人对象的指针,但如果敌人死亡并被敌人管理器删除,指针将悬空。

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

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

因此,从本质上讲,BulletTower直接锁定指针变量,而不是Enemy对象。

维护已锁定到EnemyBulletTower对象数的计数。除非该计数变为 0,否则不要删除Enemy。对于BulletTower当能量变为 0 时取下锁并减少锁计数。

弱指针也许可以完成这项工作。

此外,您可以提供一个函数或对象,而不是给一个指向子弹塔的敌人指针,如果还活着,它会返回当前锁定的敌人,或者返回一个新的敌人。