许多程序员相信在容器中储存指针与储存对象相比,前者会带来更好的性能。然而,不要忘记那些指针必须指向在某个地方存在的对象,而那些对象通常需要动态分配的。而动态分配则是一个开销很大的操作。同样,最终销毁(释放)这些对象也是花费很大的。
也许,最强烈反对把指针作为容器元素的理由是:通过给容器预先分配足够大的内存空间,你就能很容易的避免一些开支,这些开支是由于在内存中移动对象所带来的。这就会保证了:不需要再次分配,以及也就不用把对象移来移去。(例如:vector 用下列方式自我增长——它分配双倍于当前容量的储存区,把当前的值拷贝到新分配的内存中,并释放原来的内存——这就是,把对象移来移去)
你可以调用成员函数reserve()来预先分配,如下面所示:
std::vector <std::string> v;
v.reserve(1000); // 提供至少1000 个string
的空间
在某些情况下,如:你需要频繁的对容器排序,这样在容器中使用指针元素会更有用些。(但要记住:这种排序会有一丝危险,因为STL的缺省排序算法是假定容器中包含的元素是对象而不是指针)。
在大多数情况下,一个以经验为根据的测试表明,在总的执行效能方面,以对象为元素的容器要比以指针为元素的容器更有效率些。