You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用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]

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:20:27