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

Bri*_*ian 2 c++ smart-pointers auto-ptr shared-ptr

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

CvMemStorage *storage = cvCreateMemStorage();
... use the pointer ...
cvReleaseMemStorage(&storage);
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Geo*_*che 9

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

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

shared_ptr<CvMemStorage> sp(cvCreateMemStorage(), &myCvReleaseMemStorage);
Run Code Online (Sandbox Code Playgroud)