{
Sales_item *p=new Sales_item[10];
vector<Sales_item> vec(p,p+10);
//...
delete [] p;
//
}
在书P413,chapter 13.3。
我想问的是,vector的初始化不是用的是副本么? 副本肯定进行复制了,为什么会随着动态内存一起消失呢?
问的是啥意思呢?vector初始化用的是副本,delete []p之后可以正常用vec,当vec超出作用范围时STL会自动回收分配的那部分内存。
那意思就是说 delete [] p; 对vector没影响了么? “当vec超过作用范围时 STL...”是什么意思?
1.什么时候会超出作用范围?
2.delete [] p;对vec超过作用范围有什么影响?
非常感谢!
你的超出作用范围 是不是指的是 在“ { } ”外 vector 就没有作用域了? 然后就会对其进行撤销?
那这样 其实跟 p指针没多大关系? 直接
vector<Sales_item> vec;
vec.resize(10);
是不是也可以?
你说了什么? 我怎么看不见?
我测试了下,你的意思应该是指作用域的问题吧。超出作用域的话,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; }