C++语言中,所有new
和malloc
创建的变量均存放在堆区,这已经是一个共识。但是鲜为人知的是,STL库中的容器虽没有经过这两个关键字创建,但同样是存放在堆区。这与动态数组性质相同。如果从汇编角度观察便会发现,容器均调用了allocator
来创建。这里便不展开多言。
在下面的例子中,fun()
函数和main()
函数中,两个vec
的地址并不相同,而首元素的首地址却相同。这就和new
创建出的动态数组一样。
#include <iostream>
#include <vector>
using namespace std;
// 返回一个vector变量,并打印vec的地址和存放在容器中第一个数据的首地址
vector<int> fun() {
vector<int> vec; // 创建vector
vec.push_back(10); // 添加一个元素
cout << "fun():&vec" << &vec << endl;
cout << "fun():&vec[0]" << &vec[0] << endl;
return vec; // 返回vector
}
int main() {
vector<int> vec; // 创建一个vector
vec = fun(); // 接收传来的参数
cout