![](/img/trans.png)
[英]C++ Passing a pointer (pointing to an object) to function in another class
[英]Reassigning a pointer when the object it is pointing to is deleted by an instance of another class
我正在创建一个塔防游戏模型,其中敌人在被摧毁之前试图越过屏幕。
动态分配的Enemy对象的指针存储在EnemyManager类中的向量中,该类控制它们的产生和产生方式。 当敌人的生命值达到零时,EnemyManager会使用delete
删除它,并erase
指针。
我有一个BulletTower对象,该对象旨在锁定一个敌人并射击直到被摧毁,然后再锁定另一个。 这需要指向Enemy对象的指针,但是如果Enemy死亡并被EnemyManager删除,则该指针将悬空。
指针似乎无法告诉被锁定的敌人是否被摧毁。 我研究了智能指针,但是鉴于敌人的生命值达到零时会手动删除它们,因此共享指针似乎无法正常工作。
您可以将指向实际Enemy
对象的指针存储在变量中。 并且有一个指向BulletTower
对象的指针变量的指针。 杀死Enemy
, EnemyManager
可以将变量更改为nullptr
,而BulletTower
对象可以通过其拥有的指针检查此事实。
因此,从本质BulletTower
, BulletTower
锁定在指针变量上,而不是直接锁定在Enemy
对象上。
要么
保持统计有多少BulletTower
对象已锁定到Enemy
。 除非该计数变为0,否则不要删除该Enemy
对于BulletTower
,当能量变为0时,请BulletTower
锁定并减少锁定计数。
指针不足可能可以胜任。
另外,您可以提供一个函数或对象,该函数或对象可以返回当前锁定的敌人(如果还活着),或者返回一个新的对象,而不是给BulletTower一个敌人指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.