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

发布于 2024-09-01 18:38:41 字数 271 浏览 11 评论 0原文

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

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

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

谢谢。

I'm trying to use smart pointers such as auto_ptr, shared_ptr. However, I don't know how to use it in this situation.

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

I'm not sure, but I think that the storage variable is just a malloc'ed memory, not a C++ class object. Is there a way to use the smart pointers for the storage variable?

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

煮酒 2024-09-08 18:38:41

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

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

shared_ptr<CvMemStorage> sp(cvCreateMemStorage(), &myCvReleaseMemStorage);

shared_ptr allows you do specify a custom deallocator. However, looking at the documentation cvReleaseMemStorage() doesn't have the right form (void f(T*)) and you need a wrapper:

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

shared_ptr<CvMemStorage> sp(cvCreateMemStorage(), &myCvReleaseMemStorage);
回忆那么伤 2024-09-08 18:38:41

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

The shared_ptr class allows for you to provide a custom delete function/functor, you could simply wrap the cvReleaseMemStorage function in a function and provide that for shared_ptr along with the pointer you want it to manage for you?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文