我正在尝试将libsvm用于某个复杂的应用程序,并且由于 libsvm 主要是一个 C 库,因此在加载某些数据后,必须使用自定义 API 函数来释放内存。这就是我的意思:
struct svm_model *model;
model = svm_load_model("path to model file");
//do some processing
svm_free_and_destroy_model(&this->model);
这些是我使用的 libsvm API 函数的定义:
struct svm_model *svm_load_model(const char *model_file_name);
void svm_free_and_destroy_model(struct svm_model **model_ptr_ptr);
虽然这工作得很好,但如果在我处理模型数据时发生异常,那么我最终会出现内存泄漏。为了防止这种情况,我将上面的代码包装在一个类中,我svm_load_model
在其中调用构造函数和svm_free_and_destroy_model
析构函数。
现在,由于我们处于智能指针时代,我正在考虑获得更多创意,并且以某种方式将模型变量声明为std::unique_ptr
,将指向的指针设置svm_free_and_destroy_model
为自定义解除分配器,但不幸的是,我不是能够弄清楚这样的事情是否可行。目前,我什至无法编译它,我只是在黑暗中拍摄。以下是我认为它应该如何工作:
std::unique_ptr<struct svm_model *, /* what should I add here? */ > model (svm_load_model("path to model file"), svm_free_and_destroy_model);