[vs 2005]vector的默认构造流程

一、程序代码: 
#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);
}

 

你可能感兴趣的:(vector)