能否用new关键字动态分配vector?语法解析与解引用方法
C++中用
new动态分配vector的相关问题解析 首先明确:完全可以用new关键字动态分配vector对象,你给出的vector<int> *vptr = new vector<int>;是合法的,它的作用是在堆上创建一个空的vector<int>实例,vptr指向这个实例的内存地址。
下面详细解释你提到的两条合法语句:
1. vector<int> *vptr = new vector<int>[10];
- 含义:这条代码在堆上动态分配了一个包含10个
vector<int>的数组,数组里的每个vector<int>都是默认初始化的空容器。vptr指向该数组的第一个元素的地址。 - 解引用与访问方式:
- 要访问数组中第n个vector(n的范围是0到9),直接用
vptr[n]即可,得到的是一个完整的vector<int>对象,后续可以像操作普通vector一样调用成员方法,比如vptr[2].push_back(10); - 对
vptr直接解引用*vptr,会得到数组的第一个vector<int>对象,等价于vptr[0]
- 要访问数组中第n个vector(n的范围是0到9),直接用
2. vector<int> *vptr1 = new vector<int>(2,5);
- 含义:这条代码在堆上创建了单个
vector<int>对象,并用(2,5)作为初始化参数——最终这个vector会包含2个元素,每个元素的值都是5。vptr1指向这个初始化完成的vector对象。 - 解引用与访问方式:
- 直接解引用
*vptr1就能拿到对应的vector对象,比如(*vptr1).size()会返回2,(*vptr1)[1]可以访问第二个元素(值为5) - 也可以用箭头运算符
->直接调用成员函数,写法更简洁:vptr1->push_back(3);,效果和(*vptr1).push_back(3);完全一致
- 直接解引用
注意事项
用new分配的内存必须手动释放,否则会造成内存泄漏:
- 对于单个vector对象(比如
vptr、vptr1指向的实例),使用delete vptr;和delete vptr1;释放 - 对于vector数组(
vptr指向的数组),必须使用delete[] vptr;,不能省略[],否则会导致未定义行为
内容的提问来源于stack exchange,提问作者Satish Kumar Singh
相关产品推荐
相关产品推荐

