一、程序代码:
#include <vector>
using namespace std;
int main()
{
vector<int> vec;
return 1;
}
二、分析:
vector的默认构造函数如下:
vector() : _Mybase() { _Buy(0); }
其中调用了一个_Buy()的内部函数,好比向内存买一些内存块的意思,但买来之后并不急着用~
_Buy()申请的内存大小为_Capacity * sizeof(_Ty),获取内存完成后,它将更新vector内部的指针值。函数执行流程如下:
// _Buy函数中申请内存块,内存块大小为_Capacity * sizeof(_Ty)
bool _Buy(size_type _Capacity)
{
_Myfirst = 0; // 内存块起始地址
_Mylast = 0; // 已使用的部分末尾地址
_Myend = 0; // 内存块末尾地址
if (_Capacity == 0) // 如果_Capacity为0,不做任何操作
return (false);
else if (max_size() < _Capacity) // 请求量超过最大支持数量,抛出异常
throw length_error("vector<T> too long");
else
{
_Myfirst = this->_Alval.allocate(_Capacity); // 分配内存
_Mylast = _Myfirst;
_Myend = _Myfirst + _Capacity;
}
return (true);
}