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