我需要覆盖作为Rcpp函数参数传递的Rcpp :: List对象的元素。我的担心是内存安全性。如果重新分配非空列表元素,那么我是否实际上正在重连指向原始内容的指针,但从未释放存储原始内容的内存?如果是这样,有什么解决方法吗?
我知道我可以轻松修改作为Rcpp :: List元素的Rcpp对象(例如Rcpp :: NumericVector),因为Rcpp :: NumericVector进行浅复制。然而,这不能满足我的要求,即完全用其他内容替换元素。
下面,我包括一个C ++代码片段,显示了我所指的情况。
当在RStudio中通过Rcpp调用时,
我知道我可以轻松修改作为Rcpp :: List元素的Rcpp对象(例如Rcpp :: NumericVector),因为Rcpp :: NumericVector进行浅复制。然而,这不能满足我的要求,即完全用其他内容替换元素。
下面,我包括一个C ++代码片段,显示了我所指的情况。
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
void replaceListElement(List l)
{
std::vector<int> v;
v.push_back(4);
v.push_back(5);
v.push_back(6);
l["a"] = v;
}
/*** R
l <- list()
l$a <- c(1,2,3)
replaceListElement(l)
print(l)
*/
当在RStudio中通过Rcpp调用时,
print(l)
命令输出以下内容。$a
[1] 4 5 6
这是期望的结果,因此我的问题只与内存安全有关。