用C++中的参数在构造函数中定义自己类的数组
Define array of own class in constructor with parameter in C++
如何在另一个类的构造函数中创建自己类的数组,该构造函数的大小和参数在运行时给定?
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的大小?
我也读过关于矢量和保留
当你说"矢量"时,你可能是指std::vector
。
reserve
是std::vector
的成员函数,但它与您的问题无关(如果我理解正确的话),因为它只涉及向量的内部内存管理。
class Foo {
std::vector<Row> rows;
Foo(int n, int y) : rows(y, n) {} // no call to `reserve` necessary
// ...
};
但是他怎么知道Row的大小呢?
你的意思可能是std::vector
似乎能够初始化一个动态的Row
对象数组,每个对象都传递一个构造函数参数,而你自己的代码尝试却失败了
答案是std::vector
(或者更确切地说,std::allocator
,它是std::vector
模板中使用的默认分配器)不使用new[]
。它使用了一个称为placementnew的C++功能。
简单地说,这允许向量将内存分配和构造函数调用分开。这是一种低级的内存管理技术,在错误的人手中非常危险。
但是,即使是初学者,意识到它的存在也不会有什么坏处,因为它强调了一个事实,即new[]
和delete[]
确实是C++的错误特征。只是不要使用它们使用标准容器类,如std::vector
即使在几年后的某个遥远的日子里,你不得不编写自己的非常低级的容器类,放置new将是一个更好的选择。
相关文章:
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 为什么存储在数组中的地址值与其自己的地址相同,它应该指向某个不同的地址(&arr[0])?
- 数组由其类自己的指针指向的大小是多少?
- 使用自己的模板化owner_ptr类来分配多维数组
- C++:我自己类的动态数组
- 如何将OpenCV的Mat结构的部分图像矩阵加载到我自己的3x3数组中?
- C 程序要读取包含两个双重值的Excel数据的单列,这些值由逗号分隔并存储在自己的数组中
- 从我自己的类类型的指针数组中删除记录
- 如果我自己不分配数组元素,数组元素的值是多少
- 我们如何让C++程序自己修复超出范围的数组索引
- 在动态数组上实现自己的快速排序
- 用C++中的参数在构造函数中定义自己类的数组
- 如何输入矩阵样式的txt文件,而不是为C++定义我自己的int 2D数组
- 我自己类型的多维数组
- 如何从Oracle的过程中返回我自己的结构的数组/记录集?
- 如何在它自己的类中声明一个对象数组?
- 我如何创建一个2d数组指针与我自己的类作为类型
- 如何在c++中创建一个三维数组,每个层都有自己的数据类型
- 如何在主程序 c++ 中使用我自己制作的数组头文件
- C++:逐个条目评估自己的数学函数(函数数组等多维分析)