我有一个混合的C [cblas] / C ++ [库代码]库(由其他人开发),我已经用Rcpp包装了。
许多方法的代码如下:
void myclass::calculate() {
double* dataSums = (double*) calloc(N, sizeof(double));
if(dataSums == NULL) { printf("Memory allocation failed!\n"); exit(1); }
// do some calculations ...
cblas_dgemm(...);
free(dataSums); dataSums = NULL;
}
当然,exit(1)
在这里是个问题:当从R调用时,它也会关闭R,这是我不想要的。
确保:
的最佳方法是什么?exit
个来电?)std::vector
是一个问题吗?)答案 0 :(得分:4)
我会建议像
这样的东西if (dataSums == NULL) Rcpp::stop("Memory allocation failed!\n");
无论如何,您的代码都包含try / catch
的相应(C ++)图层
如果您使用Rcpp属性,或内联,或者您按照我们多年来提供的示例手动执行。并且考虑到C ++异常层,您可以使用它。
如果您的代码层需要额外的清理,您可以在那里添加该层。但是C ++数据结构将被正确解开。