Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103795
  • 博文数量: 35
  • 博客积分: 2386
  • 博客等级: 大尉
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-05 06:11
文章分类

全部博文(35)

文章存档

2011年(1)

2010年(2)

2009年(32)

分类: C/C++

2009-06-01 22:51:42

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来的内存








阅读(533) | 评论(0) | 转发(0) |
0

上一篇:逆序对

下一篇:【转】Debian发行版简介

给主人留下些什么吧!~~