c++ - 我如何在指向 Mat 析构函数的指针上调用 delete ~Mat()

标签 c++ opencv

我有这个函数来删除指向 A Mat 的指针,我被建议更新以调用 Mat 析构函数以促进删除:

    void cv_x_Mat(void* ptr) {
        delete (Mat*)ptr;
    }

虽然这似乎没有编译,但没有发布错误,因为我认为任何人都能看到熟悉析构函数的错误。感谢您的帮助。

    void cv_x_Mat(void* ptr) {
        Mat::~Mat() {delete ptr;};
    }

最佳答案

您可以使用 Mat::release() 来释放矩阵内存:

cv::Mat *ptr = new cv::Mat(1000, 1000, CV_8UC3);
ptr->setTo(cv::Scalar(255, 0, 0));
// some code
ptr->release(); // DON'T release manually ptr->data
delete ptr;     // this will call delete[] on ptr->data

你甚至可以省略 release() 因为 cv::Mat 析构函数会为你做:

cv::Mat *ptr = new cv::Mat(1000, 1000, CV_8UC3);
ptr->setTo(cv::Scalar(255, 0, 0));
// some code
delete ptr;     // this will call delete[] on ptr->data

而且 Mat::release 是删除安全的。如果做两次,不会造成任何不良的副作用。

关于c++ - 我如何在指向 Mat 析构函数的指针上调用 delete ~Mat(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016534/

相关文章:

c++ - 方向梯度直方图

python-3.x - 如何解决 cv2.error : (-215)?

python - 检测此图像中的绿线并计算它们的长度

具有函数的结构的c++大小

c++ - 3维数组的重新分配

c++ - 我在正确的轨道上吗?收银程序C++

opencv - 在 Mac 中使用不同版本的 g++ 运行 OpenMP

opencv - opencv_createsamples 中的链接问题

c++ - 条件运算符和数组/返回指向数组的指针

c++ - 什么时候字符和 int 连接会导致段错误?