《Effective STL》 03 确保容器中的对象拷贝正确而高效
2018-03-14 00:28
417 查看
当你通过insert或者push_back之类的操作将对象加入到容器中,事实上存进容器中的是你所指定的对象的拷贝。当通过front等操作后,取出来的对象也是所制定的对象的拷贝而已。存放进容器的对象越多耗费的时间就越多。同时还存在“剥离”的情况存在,例如:当创建一个存放基类对象的容器,却向容器中存放派生类的对象,那么在派生类对象被拷贝进容器中,那么特有的派生类的信息就会丢失掉。之所以会发生“剥离”现象,是因为将对象存入容器时,对象的拷贝构造函数起作用,那么它只会拷贝基类的信息,而派生类的信息则会被丢弃。
解决的办法就是使容器包含某个对象的指针而不是对象。因为拷贝指针的速度很快,它是一位一位进行拷贝的,关键是在进行指针拷贝的过程中不会发生“剥离”现象。但是相比于拷贝对象,拷贝指针的开销要远小于拷贝对象。
如果我们在某个时间点只需要使用maxNumWidgets个对象——Widget,但是后面数目可能会增加或减少时,可以考虑使用vector。相比于创建一个Widget对象组成的数组,使用vector会更灵活些。当你只需要多少个,它就会为你创建多少个。但是这里说的创建只是将对象拷贝到容器中。STL的容器就是在进行不停地拷贝对象。所以一旦将拷贝的数量定死,那么可能会出现拷贝过多的对象。
解决的办法就是使容器包含某个对象的指针而不是对象。因为拷贝指针的速度很快,它是一位一位进行拷贝的,关键是在进行指针拷贝的过程中不会发生“剥离”现象。但是相比于拷贝对象,拷贝指针的开销要远小于拷贝对象。
如果我们在某个时间点只需要使用maxNumWidgets个对象——Widget,但是后面数目可能会增加或减少时,可以考虑使用vector。相比于创建一个Widget对象组成的数组,使用vector会更灵活些。当你只需要多少个,它就会为你创建多少个。但是这里说的创建只是将对象拷贝到容器中。STL的容器就是在进行不停地拷贝对象。所以一旦将拷贝的数量定死,那么可能会出现拷贝过多的对象。
相关文章推荐
- effective stl:确保容器中对象副本正确而高效
- 第3条:确保容器中的对象拷贝正确而高效
- effective C++ STL 第三条:确保容器中的对象副本正确而高效
- STL高效编程(三)-使容器元素的拷贝正确和高效
- 条款3:使容器里对象的拷贝操作轻量而正确
- 条款3:使容器里对象的拷贝操作轻量而正确
- 使容器里对象的拷贝操作轻量而正确
- 条款3:使容器里对象的拷贝操作轻量而正确
- 使容器里对象的拷贝操作轻量而正确
- Effective STL——容器中所发生的对象拷贝问题
- 未能初始化 PassportManager 对象。请确保在服务器上正确安装了 Microsoft Passport。
- 容器中的对象拷贝
- 容器中对象拷贝的正确性与高效性
- C++ STL 如何安全的将一个含有指针变量的类对象放在容器中? 避免浅拷贝问题
- C++之模板类(Template) 容器之map 及 对象副本 深/浅拷贝 等问题
- 对象容器Effective STL——容器中所发生的对象拷贝问题
- C++模板类 容器之map 及 对象副本 深/浅拷贝 等问题
- C++模板类 容器之map 及 对象副本 深/浅拷贝 等问题
- C++模板类 容器之map 及 对象副本 深/浅拷贝 等问题
- Github 开源:高效好用的对象间属性拷贝工具:升讯威 Mapper( Sheng.Mapper)