【问题标题】:Getting additional memory on the go without pointers在没有指针的情况下获得额外的内存
【发布时间】:2012-06-18 23:43:37
【问题描述】:

在 C++ 中,是否可以在程序运行时创建一个新数组?具体来说,假设我在一个类中有一个数据成员,变量的名称是数组,它是一个大小为 10 的数组。假设在运行时我想要一个更大的数组,我可以在不使用指针的情况下做到这一点吗?可以有如下方法吗?

int[] expandCapacity(int currentCapacity) {
     int [] arr = new int[currentCapacity*2];
     currentCapacity*=2;
     return arr;
}

为什么我不能用这个方法来扩展当前数组的容量呢:

currentCapacity = 10;
array = expandCapacity (currentCapacity);

如果可行,则无需使用指针。我觉得我在这里遗漏了一些重要的东西。如果您能指出我遗漏的内容,我将不胜感激。

【问题讨论】:

  • 即使像 std::vector 这样的容器在内部也使用指针。没有办法绕过它们。
  • 这只是一个交际练习还是你想要解决的问题?
  • 此外,在不同于“在编译时处理未知大小的内存块”的情况下也需要指针。例如,考虑子类型的多态性。返回 T 的子类实例的函数必须返回 T*。

标签: c++ arrays pointers


【解决方案1】:

不,这完全不可能。

但是,自己这样做是纯粹的精神错乱。使用std::vector<int>,让您的编译器实现者为您完成所有工作。

【讨论】:

  • 你的措辞很奇怪。第二句话似乎暗示它可能的。
  • 我实际上是在研究 std::vector 是如何实现的。我并没有尝试自己实现矢量类。
【解决方案2】:

您应该使用像 vector 这样的 STL 容器。

如果可行,则无需使用指针。我觉得我是 这里遗漏了一些重要的东西。如果您能指出,我将不胜感激 我错过了什么。

指针的用途远不止于此。我建议找到一个好的 c++ 教程(查看 c++ FAQ 了解更多信息)。

【讨论】:

  • 我的意思是这种特殊用途不需要指针,并不是完全没用。但我明白我错在哪里。我应该指定的。谢谢
猜你喜欢
  • 1970-01-01
  • 2015-08-30
  • 2011-09-03
  • 1970-01-01
  • 2016-04-07
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
相关资源
最近更新 更多