2

我正在尝试使用智能指针,例如 auto_ptr、shared_ptr。但是,我不知道如何在这种情况下使用它。

CvMemStorage *storage = cvCreateMemStorage();
... use the pointer ...
cvReleaseMemStorage(&storage);

我不确定,但我认为存储变量只是一个 malloc 的内存,而不是 C++ 类对象。有没有办法将智能指针用于存储变量?

谢谢你。

4

2 回答 2

9

shared_ptr允许您指定自定义解除分配器。但是,查看文档cvReleaseMemStorage()没有正确的形式 ( void f(T*)),您需要一个包装器:

void myCvReleaseMemStorage(CvMemStorage* p) {
   cvReleaseMemStorage(&p);
}

shared_ptr<CvMemStorage> sp(cvCreateMemStorage(), &myCvReleaseMemStorage);
于 2010-05-17T07:45:19.250 回答
1

该类shared_ptr允许您提供自定义删除函数/函子,您可以简单地将cvReleaseMemStorage函数包装在一个函数中并提供它shared_ptr以及您​​希望它为您管理的指针?

于 2010-05-17T07:49:23.503 回答