首页 新闻 会员 周边

c++ primer 中vector的析构

0
悬赏园豆:20 [已解决问题] 解决于 2012-09-01 11:24

{

  Sales_item *p=new Sales_item[10];

  vector<Sales_item> vec(p,p+10);

  //...

  delete [] p;

  //

}

 

在书P413,chapter 13.3。   

我想问的是,vector的初始化不是用的是副本么? 副本肯定进行复制了,为什么会随着动态内存一起消失呢?

C++
爱的谜语的主页 爱的谜语 | 初学一级 | 园豆:187
提问于:2012-08-18 11:09
< >
分享
最佳答案
1

问的是啥意思呢?vector初始化用的是副本,delete []p之后可以正常用vec,当vec超出作用范围时STL会自动回收分配的那部分内存。

MikeLin | 菜鸟二级 |园豆:202 | 2012-08-18 19:05

那意思就是说 delete [] p; 对vector没影响了么?  “当vec超过作用范围时 STL...”是什么意思? 

1.什么时候会超出作用范围?

2.delete [] p;对vec超过作用范围有什么影响?

 

非常感谢!

爱的谜语 | 园豆:187 (初学一级) | 2012-08-18 20:17

你的超出作用范围 是不是指的是 在“  { }  ”外 vector 就没有作用域了? 然后就会对其进行撤销?

那这样 其实跟  p指针没多大关系?   直接 

vector<Sales_item> vec;

vec.resize(10);

是不是也可以?

爱的谜语 | 园豆:187 (初学一级) | 2012-08-18 20:22
其他回答(2)
0

         

guoyuejun | 园豆:204 (菜鸟二级) | 2012-08-18 11:15

你说了什么? 我怎么看不见?

支持(0) 反对(0) 爱的谜语 | 园豆:187 (初学一级) | 2012-08-18 11:16
1

我测试了下,你的意思应该是指作用域的问题吧。超出作用域的话,vector会自动销毁元素的。

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int *p=new int[10];
    for (int i=0; i<10;i++)
    {
        p[i] = i;
    }
    vector<int> vec(p,p+10);
    for (int i=0; i<10;i++)
    {
        cout <<vec[i] << " ";
    }
    cout << endl;
    delete [] p;
    p = NULL;
    if (p!=NULL)
    {
        for (int i=0; i<10;i++)
        {
            cout <<p[i] << " ";
        }
        cout << endl;
    }

    for (int i=0; i<10;i++)
    {
        cout <<vec[i] << " ";
    }
    cout << endl;
    return 0;
}
收获园豆:20
涵曦 | 园豆:65 (初学一级) | 2012-08-21 13:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册