C++ C++;非对象类型的智能指针?
我正在尝试使用智能指针,如自动、共享指针。然而,我不知道如何在这种情况下使用它C++ C++;非对象类型的智能指针?,c++,smart-pointers,shared-ptr,auto-ptr,C++,Smart Pointers,Shared Ptr,Auto Ptr,我正在尝试使用智能指针,如自动、共享指针。然而,我不知道如何在这种情况下使用它 CvMemStorage *storage = cvCreateMemStorage(); ... use the pointer ... cvReleaseMemStorage(&storage); 我不确定,但我认为存储变量只是一个MalClice内存,而不是C++类对象。有没有办法为存储变量使用智能指针 谢谢。共享\u ptr允许您指定自定义deallocator。但是,查看文档cvreleasems
CvMemStorage *storage = cvCreateMemStorage();
... use the pointer ...
cvReleaseMemStorage(&storage);
我不确定,但我认为存储变量只是一个MalClice内存,而不是C++类对象。有没有办法为存储变量使用智能指针
谢谢。共享\u ptr允许您指定自定义deallocator。但是,查看文档
cvreleasemstorage()
没有正确的格式(void f(t*)
),您需要一个包装器:
void myCvReleaseMemStorage(CvMemStorage* p) {
cvReleaseMemStorage(&p);
}
shared_ptr<CvMemStorage> sp(cvCreateMemStorage(), &myCvReleaseMemStorage);
void mycvreleasemstorage(CvMemStorage*p){
cvreleasemstorage&p;
}
共享_ptr sp(cvCreateMemStorage(),&mycvreleasemstorage);
共享的类允许您提供自定义的删除函数/functor,您可以简单地将cvreleasemstorage
函数包装在一个函数中,并为shared\u ptr
提供该函数以及您希望它为您管理的指针?如果不查看cvCreateMemStorage
的源代码,我们无法告诉您如何分配内存。它可能是malloc
ed,可能是new
ed,可能不是任何东西,可能函数cvCreateMemStorage
总是返回NULL
。您确定cvreleasemstorage
使用CvMemStorage**
而不是CvMemStorage*
?这似乎很奇怪。确实很奇怪,但是。@ereOn:是的,它是一个CvMemStorage**,我认为它可能会在发布资源后将指针设置为NULL。还要注意的是,shared\u ptr
的这一特性经常被低估。要使auto_ptr
工作,用户需要知道如何释放它,但是使用auto_ptr
可以指定如何在施工时释放,然后将其隐藏起来,用户无需担心。当然,默认的是一个经典的delete
调用。