在C++中有类似于Java中的弱引用吗?我有游戏中的对象列表(类Soldier,列表是std :: list*enemy),我在其中列出了可见的敌人士兵列表.我的每一个士兵都可以指向敌方士兵(士兵*目标;内部课程).当我的其他地方士兵杀死敌人士兵时,我需要什么(然后杀死士兵从敌人名单中移除)我希望所有具有士兵指针的士兵现在都有空,因为它被删除了.我可以用士兵的身份解决这个问题,并在每个循环中检查是否有同样身份的敌人士兵但似乎是蛮力.我能以更优雅的方式解决这个问题吗(我不能用c ++ 11吗?
class Soldier{
Soldier* target;
public:
// other functions
void shootAtTarget();
};
Run Code Online (Sandbox Code Playgroud)
Ree*_*sey 14
请注意,没有确切的行为等同性.Java的弱参考概念实际上依赖于垃圾收集器和一般的托管内存.在C++中,指针只是一个内存位置,因此其他东西需要"跟踪"对象的生命周期.
在Java中,所有内存都由垃圾收集器管理,因此有一种机制可以知道何时删除了一个对象.在C++中,没有库使用就不会发生这种情况,因为指针本身实际上只是一个数字.
您应该能够使用std::weak_ptr(或tr1::weak_ptr)来获得类似的行为.这需要将对象存储在一个std::shared_ptr而不是一个原始指针中(不过这是一个好主意).
既然你不能使用C++ 11,可以使用boost::weak_ptr与boost::shared_ptr替代C++标准库.
| 归档时间: |
|
| 查看次数: |
3121 次 |
| 最近记录: |