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

Dynamically create an array of custom object types

本文关键字:数组 类型 对象 创建 自定义 动态      更新时间:2023-10-16

我正在尝试创建一个Mat对象数组来存储图像,并且收到了使用静态类型数字以外的任何数字(如10 )的警告

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

当我尝试这个代码时,我得到一个错误,说明非POD元素类型"cv::Mat"的可变长度数组

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

如何根据boundect的大小创建Mats数组?

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

你可以像这样创建

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>();
}