动态创建自定义对象类型的数组

时间:2014-04-12 22:36:24

标签: c++ arrays

我正在尝试创建一个Mat对象数组来存储图像,并且在使用除静态类型数字之外的其他任何内容时都会收到警告,例如10

int numberOfRects = boundRect.size();
Mat image_array[numberOfRects];

当我尝试这段代码时,我收到一条错误,指出非POD元素类型的可变长度数组&#c; cv :: Mat'

此代码也是如此:Mat image_array[boundRect.size()];

如何根据boundRect的大小创建一个Mats数组?

1 个答案:

答案 0 :(得分:2)

您需要创建一个动态数组。这是学习语言的一个基本但非简单的方面,所以我建议你先学习一些简单的例子。

您可以像这样创建

Mat *image_array = new Mat[numberOfRects];

但必须在完成后删除它,否则会有内存泄漏。

delete[] image_array;

更好的选择是使用std::vector,它会自动删除其内容。但是一个类必须是可复制的才能在其中使用,我不知道你的Mat类允许什么。它看起来像

std::vector<Mat> image_array(numberOfRects);

如果无法复制Mat,则正确的C ++ 11解决方案是使用智能指针向量。

std::vector<std::unique_ptr<Mat>> image_array(numberOfRects);
for (auto& mat : image_array)
{
    mat = std::make_unique<Mat>();
}