c++ - 在堆上分配指针数组

标签 c++ arrays heap-memory

下面是创建 x 个新对象,还是简单地为 x 个对象分配空间?:

Vector3D* binArray = new Vector3D[size];

我需要为堆上的 x Vector3D 对象构建一个具有空间的数组。但是,只有在调用“添加”函数时才能创建 Vector3D 对象 - 这将获取参数,在堆上构造对象并将其地址添加到 Vector3D 指针数组。

最佳答案

这确实在堆上创建了一个 Vector3D 对象数组。

每个 vector 都是通过调用 Vector3D 构造函数创建的。

在 Vector3D 的默认构造函数中放置一些调试打印语句,观察构造函数被调用的次数与数组中的 vector 相同。

例子:

#include <iostream>
using namespace std;

class C {
public:
  C() { cout << "Hello default constructor here\n"; }
};

int main() {
  C* cs = new C[5];
}

输出是:

Hello default constructor here
Hello default constructor here
Hello default constructor here
Hello default constructor here
Hello default constructor here

如果你的类没有默认构造函数,你不能一次性分配数组(感谢你的评论@Everyone),所以在这种情况下考虑使用 std::vectorstd::array 并动态添加您的 Vector3D 对象 --- 甚至“静态”!示例:

#include <iostream>
#include <vector>
using namespace std;

class Vector3D {
  double i, j, k;
public:
  Vector3D(double i, double j, double k): i(i), j(j), k(k) {}
};

int main() {
  vector<Vector3D> v = {
    Vector3D(3, 4, 5),
    Vector3D(6, 8, 10),
    Vector3D(7, 24, 25)
  };
  v.push_back(Vector3D(1, 2, 3));
  cout << v.size() << '\n';
}

这输出 4。

您还可以使 vector 包含指向 Vector3D 对象的指针。

关于c++ - 在堆上分配指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47293301/

相关文章:

java - hadoop windows(工作正常)linux java堆空间

c++ - 在内存管理器中分配数组

c++ - QAudioDecoder - 未找到服务

c++ - OpenCL - 内核方法返回意外结果

javascript - 返回 JavaScript 数组中具有最低值的对象

arrays - 函数中的 PostgreSQL 数组格式

c++ - 在堆上创建数组并用指针寻址

C++数据结构代替数据库

C++11 lambda 捕获列表 [=] 使用引用

java - 可打包 : Double Array , 日历和位图