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

关于C++ sample类构造函数中list<int>动态数组分配的疑问

理解new list<int>[x1]的内存分配逻辑

嘿,我来帮你把这条语句的逻辑拆解得明明白白~首先先提个小细节:你贴的代码里有个语法错误——构造函数是不能有返回值的,所以定义里的void sample::sample(int n)应该改成sample::sample(int n),同时类里的构造函数声明也要对应改成sample(int n);,不然编译器会报错哦。

接下来回到核心问题:x2 = new list<int>[x1];到底做了什么?

这条语句是在堆内存上动态分配一个包含x1个std::list<int>对象的数组,具体拆解成两步:

  • 第一步:根据x1的值(也就是你传入构造函数的n),在堆上申请足够的内存空间,用来存放x1个独立的std::list<int>对象。每个list都会被默认初始化,也就是变成一个空的链表。
  • 第二步:把这个数组的首地址赋值给指针x2,这样x2就指向了数组的第一个list<int>元素。

举个直观的例子:如果x1的值是3,那么这条语句执行后,x2会指向一个包含3个空list的数组,你可以像操作普通数组一样访问它们:

  • x2[0] → 第一个空list
  • x2[1] → 第二个空list
  • x2[2] → 第三个空list

最后要注意两个关键事项:

  • 因为用了new[]来分配数组,所以后续销毁这个数组的时候,必须用delete[] x2;,不能只用delete x2;——后者只会销毁数组的第一个元素,剩下的元素会导致内存泄漏,而且它们的析构函数也不会被正确调用。
  • 这个x2指针是类的私有成员,记得在类的析构函数里加上delete[] x2;,不然对象销毁时会漏掉堆内存的释放。

内容的提问来源于stack exchange,提问作者Mohammed Arshaan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:36:51