注意!!一定要谨慎使用c/c++原生指针

使用指针,要非常小心,今天在做一个小游戏时,就碰到一个使用原生指针的问题,找了好几个小时,才定位到问题的所在,晕。

主要是顶层逻辑中引用了一个指针,而在业务逻辑中将此指针删除了。这种在代码量很少的情况下,很容易被发现,但是代码量多了,逻辑多了的时候,想一下子定位到问题所在,就没那么容易了。

结论:能用智能指针,就避免直接使用原生指针;删除指针时,要极其的小心,多想想是否有其它地方在引用着。随意的delete,会在你稍不注意的时候,就引入bug,而且极其难定位问题所在。

 

以下是顶层逻辑,在业务逻辑中,会删除m_World.GetEntityArray中的对象,导致内存访问违规!!!

//逻辑函数
        BattleWorld::EntityArray mEntitys = m_World.GetEntityArray();
        for ( auto it = mEntitys.begin(); it != mEntitys.end(); ++it )
        {
            if ( *it )
            {
                AiObject* pAi= (*it)->GetAi();
                if ( pAi )
                {
                    pAi->Run();
                }
            }
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值