【问题标题】:How should I delete vector?我应该如何删除矢量?
【发布时间】:2018-11-28 16:44:12
【问题描述】:

我有一个向量

std::vector<cv::Mat>* images = new std::vector<cv::Mat>();
images.push_back(image0);
images.push_back(image1);

std::vector<std::vector<cv::Mat>*> allImages;
allImages.push_back(images);

我应该如何释放内存?

【问题讨论】:

  • 为什么会有指向向量的指针?为什么不简单地std::vector&lt;cv::Mat&gt; images?另外,向量是否分配有new
  • 只删除向量。 OpenCV Mat 使用引用计数,所以如果没有在其他地方使用,所有图像都会自动释放,因为删除向量将调用每个元素的析构函数。如果向量有 cv::Mat* 元素,则必须手动删除它们。
  • 因为我希望对象在当前范围内存活。

标签: c++ opencv vector


【解决方案1】:

我不精通 OpenCV,但是通过删除你的向量,你调用了向量的析构函数,而该析构函数又调用了它所有元素的析构函数。

如果cv::Mat 的生命周期没有什么特别之处(而且会很奇怪),那么只需删除该向量即可。

【讨论】:

  • 图像类型使用某种句柄/标题和函数来手动分配和释放像素内存的情况并不少见。但是 cv::Mat 通过引用计数和自动释放该像素内存来做到这一点。
【解决方案2】:

对于 c++,您可以使用 clear() 来释放向量的内存并删除其中的所有对象。由于在您的代码中,它是一个指向向量的指针,因此请确保您清除的是向量而不是指针,它应该类似于 images-&gt;clear();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多