用于非对象类型的C ++智能指针?

时间:2010-05-17 07:36:37

标签: c++ smart-pointers shared-ptr auto-ptr

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

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

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

谢谢。

2 个答案:

答案 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提供指针以及指针希望它为你管理?