C++ vector容器的swap方法

刚才在研究cocos2d-x源码时,遇到这么几行代码:

void AutoreleasePool::clear()
{
    std::vector<Ref*> releasings;
    releasings.swap(_managedObjectArray);
    for (const auto &obj : releasings)
    {
        obj->release();
    }
}

AutoreleasePool是一个用来托管内存的对象池,_managedObjectArray是一个std::vector<Ref*>类型的成员,用来保存所有管理的对象,这几行代码要做的事情就是:遍历所有对象,依次调用他们的release()方法,最后清空这个vector。

但是注意到这两句:

std::vector<Ref*> releasings;
releasings.swap(_managedObjectArray);

把一个默认的临时对象和原有的成员进行了swap,然后对交换后的临时对象进行遍历。这看起来好像是有点多余?为什么不直接遍历_managedObjectArray,然后再调用其clear()方法呢?

《Effective STL》第17条:从vector中删除元素缩减了该vector的大小(size),但是并没有减小它的容量(capacity)。

了解STL的同学都知道size和capacity的区别,那么这里的swap调用就能清楚作者意图了:遍历完vector后还要释放其所

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值