当你通过insert或者push_back之类的操作将对象加入到容器中,事实上存进容器中的是你所指定的对象的拷贝。当通过front等操作后,取出来的对象也是所制定的对象的拷贝而已。存放进容器的对象越多耗费的时间就越多。同时还存在“剥离”的情况存在,例如:当创建一个存放基类对象的容器,却向容器中存放派生类的对象,那么在派生类对象被拷贝进容器中,那么特有的派生类的信息就会丢失掉。之所以会发生“剥离”现象,是因为将对象存入容器时,对象的拷贝构造函数起作用,那么它只会拷贝基类的信息,而派生类的信息则会被丢弃。
解决的办法就是使容器包含某个对象的指针而不是对象。因为拷贝指针的速度很快,它是一位一位进行拷贝的,关键是在进行指针拷贝的过程中不会发生“剥离”现象。但是相比于拷贝对象,拷贝指针的开销要远小于拷贝对象。
如果我们在某个时间点只需要使用maxNumWidgets个对象——Widget,但是后面数目可能会增加或减少时,可以考虑使用vector。相比于创建一个Widget对象组成的数组,使用vector会更灵活些。当你只需要多少个,它就会为你创建多少个。但是这里说的创建只是将对象拷贝到容器中。STL的容器就是在进行不停地拷贝对象。所以一旦将拷贝的数量定死,那么可能会出现拷贝过多的对象。