如果你试图释放这样的内存,你将不会成功。查看源代码(请参阅下文),如果recount为NULL,则不执行解除分配。实际上,当用指向用户分配数据的指针构造Mat时,refcount被设置为NULL。
inline void Mat::release()
{
if(refcount && CV_XADD(refcount, -1) == 1)
deallocate();
data = datastart = dataend = datalimit = 0;
size.p[0] = 0;
refcount = 0;
}
如果在另一方面,通过MariusSiuram的建议,你设定在零引用计数什么百分点,释放一定会成功。 但我不确定为什么你会这样做,因为img的析构函数会为您解除分配。
关于你提到的有关在矢量擦除垫评论,这里是一个演示:
#include
#include "opencv2/highgui/highgui.hpp"
#include
#include
using namespace std;
int main()
{
cv::Mat img = cv::imread("lena.jpg");
cout << "*refcount = " << (*img.refcount) << " should be 1" << endl;
vector<