我正在尝试使用智能指针,例如auto_ptr,shared_ptr。但是,我不知道在这种情况下如何使用它。
CvMemStorage *storage = cvCreateMemStorage();
... use the pointer ...
cvReleaseMemStorage(&storage);
我不确定,但我认为存储变量只是一个malloc的内存,而不是C ++类对象。有没有办法将智能指针用于存储变量?
谢谢。
答案 0 :(得分:9)
shared_ptr
允许您指定自定义解除分配器。但是,查看文档cvReleaseMemStorage()
没有正确的格式(void f(T*)
),您需要一个包装器:
void myCvReleaseMemStorage(CvMemStorage* p) {
cvReleaseMemStorage(&p);
}
shared_ptr<CvMemStorage> sp(cvCreateMemStorage(), &myCvReleaseMemStorage);
答案 1 :(得分:1)
shared_ptr
类允许您提供自定义删除功能/仿函数,您可以简单地将cvReleaseMemStorage
函数包装在函数中并为shared_ptr
提供指针以及指针希望它为你管理?