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

时间:2019-05-21 10:58:09

标签: c++ pointers shared-ptr smart-pointers dangling-pointer

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

动态分配的Enemy对象的指针存储在EnemyManager类中的向量中,该类控制它们的产生和产生方式。当敌人的生命值达到零时,EnemyManager会使用delete将其删除,并且还会erase将指针删除。

我有一个BulletTower对象,该对象旨在锁定一个敌人并射击直到其被摧毁,然后再锁定另一个。这需要指向Enemy对象的指针,但是如果Enemy死亡并被EnemyManager删除,则该指针将悬空。

指针似乎无法告诉被锁定的敌人是否被摧毁。我研究了智能指针,但是鉴于敌人的生命值达到零时会手动删除它们,因此共享指针似乎无法工作。

2 个答案:

答案 0 :(得分:1)

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

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

OR

保持计数BulletTower个对象已锁定到Enemy的数量。除非该计数变为0,否则不要删除Enemy。对于BulletTower,请在能量变为0时将锁取下,并减小锁计数。

答案 1 :(得分:0)

Weak pointer也许可以胜任。

此外,您可以提供一个函数或对象,该函数或对象可以返回当前锁定的敌人(如果还活着),或者返回一个新的对象。