为什么不通过将指针移动到vector [0]来实现c ++ std :: vector :: pop_front()?

Ian*_*Ooi 6 c++ arrays stl vector

为什么不能通过pop_front()简单地将包含在向量名称中的指针移到一个位置来实现C++向量?所以在包含数组的向量中foo,foo是一个指向的指针foo[0],因此pop_front()会使指针foo = foo[1]和括号运算符只执行正常的指针数学运算.这是否与C++如何跟踪您在为阵列分配空间时所使用的内存有关?

这与我见过的其他问题类似,为什么std::vector没有pop_front()功能,我承认,但我没有人问为什么你不能转移指针.

Bor*_*lid 3

如果这样做,将vector无法释放其内存。

通常,您希望每个对象的开销vector较小。这意味着您只存储三项:指向第一个元素的指针、容量和长度。

为了实现您的建议,每个vector所有)都需要一个额外的成员变量:第零个元素所在的起始指针的偏移量。否则,内存将无法被释放,因为它的原始句柄将会丢失。

这是一种权衡,但一般来说,可能拥有数百万个实例的对象的内存消耗比.vector