1. 函数中定义一个向量(对象),是在函数堆栈中分配空间的吗?
比如
void my_fun()
{
vector a;
....
}
向量a是像其他的动态变量一样是在函数堆栈中分配空间的?还是作为一个对象,如果是一个对象,函数调用完后谁负责回收它的内存呢?
答:a本身在栈,内部数据指向的内容在堆中;和 int* a一样,a在栈中,*a在堆中
void demo()
{
int begin;
cout << "Start Address of Function:\n\t" << &begin << endl;
vector a(10);
cout << "Address of Vector:\n\t" << &a << endl;
cout << "Address of Contents of Vector:\n\t"; // 向量元素的地址与函数中定义的变量的地址范围差距明显
for (int i = 0; i < 10; i++)
cout << &a[i] << ' ';
cout << endl;
int end;
cout << "End Address of Function:\n\t" << &end << endl;
}
2. 既然*a在堆中,相当于malloc得来的,那么也存在内存回收的问题了。比如在一个函数中定义了一个向量(对象),必须在函数调用返回之前回收堆中的内存吗?
答:向量的析构函数自动会delete其new来的内存
阅读(1159) | 评论(0) | 转发(0) |