在 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
。
reserve
是std::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,放置新的将是更好的选择。
如何在另一个 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
。
reserve
是std::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.
简单来说,这允许向量分离内存分配和构造函数调用。它是一种低级内存管理技术,在坏人手中非常危险。
但是知道它的存在并没有坏处,即使是初学者,因为它强调了一个事实,即 new[]
和 delete[]
确实是 C++ 的缺陷。只是不要使用它们。 使用标准容器 class 像 std::vector
. 即使你曾经应该,在从现在开始的某个遥远的日子里,也必须写你自己的低级容器class,放置新的将是更好的选择。