我需要覆盖Rcpp::List作为参数传递给Rcpp函数的对象的元素。我关心的是内存安全性。是通过重新分配列表的非空元素来有效地重新链接指向原始内容的指针,却从未取消分配存储原始内容的内存的情况吗?如果是的话,如何解决呢?
我知道我可以轻松地修改作为元素的Rcpp对象(例如Rcpp::NumericVector)Rcpp::List,因为它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)
*/
Run Code Online (Sandbox Code Playgroud)
当通过RStudio中的Rcpp来源时,该print(l)命令输出以下内容
$a
[1] 4 5 6
Run Code Online (Sandbox Code Playgroud)
这是理想的结果,所以我的问题仅与内存安全有关。