gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:06:51 25 4
gpt4 key购买 nike

我有这个函数来删除指向 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com