《Effective STL》 03 确保容器中的对象拷贝正确而高效

    当你通过insert或者push_back之类的操作将对象加入到容器中,事实上存进容器中的是你所指定的对象的拷贝。当通过front等操作后,取出来的对象也是所制定的对象的拷贝而已。存放进容器的对象越多耗费的时间就越多。同时还存在“剥离”的情况存在,例如:当创建一个存放基类对象的容器,却向容器中存放派生类的对象,那么在派生类对象被拷贝进容器中,那么特有的派生类的信息就会丢失掉。之所以会发生“剥离”现象,是因为将对象存入容器时,对象的拷贝构造函数起作用,那么它只会拷贝基类的信息,而派生类的信息则会被丢弃。

    解决的办法就是使容器包含某个对象的指针而不是对象。因为拷贝指针的速度很快,它是一位一位进行拷贝的,关键是在进行指针拷贝的过程中不会发生“剥离”现象。但是相比于拷贝对象,拷贝指针的开销要远小于拷贝对象。

    如果我们在某个时间点只需要使用maxNumWidgets个对象——Widget,但是后面数目可能会增加或减少时,可以考虑使用vector。相比于创建一个Widget对象组成的数组,使用vector会更灵活些。当你只需要多少个,它就会为你创建多少个。但是这里说的创建只是将对象拷贝到容器中。STL的容器就是在进行不停地拷贝对象。所以一旦将拷贝的数量定死,那么可能会出现拷贝过多的对象。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值