在 C++ 中使用参数在构造函数中定义自己的数组 class

Define array of own class in constructor with parameter in C++

如何在另一个 class 的构造函数中创建一个自己的 class 数组,其大小和参数在运行时给定?

class Row {
  ...
  Row(int n) { ... }
  ...
}

我想用在:

class Foo {
  Row *row; // pointer to array containing rows

  Foo(int n, int y) {
    row = new Row[y](n);
  }
}

那是行不通的,也没有找到解决方案。 我也看过Vector和reserve但是他怎么知道Row的大小呢?

I also read about Vector and reserve

当你说 "Vector" 时,你可能指的是 std::vector

reservestd::vector的一个成员函数,但它与你的问题无关(如果我理解正确),因为它只涉及vector的内部内存管理。

class Foo {
  std::vector<Row> rows;

  Foo(int n, int y) : rows(y, n) {} // no call to `reserve` necessary

  // ...
};

but how can he know the size of Row?

您的意思可能是 std::vector 似乎能够初始化 Row 对象的动态数组,并向每个对象传递一个构造函数参数,而您自己的代码尝试这样做却失败了。

答案是 std::vector(或者更确切地说,std::allocator,它是 std::vector 模板中使用的默认分配器) 使用 new[]。它使用称为 placement new.

的 C++ 功能

简单来说,这允许向量分离内存分配和构造函数调用。它是一种低级内存管理技术,在坏人手中非常危险。

但是知道它的存在并没有坏处,即使是初学者,因为它强调了一个事实,即 new[]delete[] 确实是 C++ 的缺陷。只是不要使用它们。 使用标准容器 class 像 std::vector. 即使你曾经应该,在从现在开始的某个遥远的日子里,也必须写你自己的低级容器class,放置新的将是更好的选择。