使用RInside析构函数

使用RInside析构函数,r,rcpp,rinside,R,Rcpp,Rinside,一个简单的实验表明,每个线程一次只允许一个RInside实例 #include <RInside.h> int main() { RInside R1; R1.parseEval("cat('Hello, R1\n')"); RInside R2; R2.parseEval("cat('Hello, R2\n')"); return 0; } 然而,另一个成功创建RInside实例的实验的结果并不十分清楚 #include <RInside.h>

一个简单的实验表明,每个线程一次只允许一个RInside实例

#include <RInside.h>

int main() {
  RInside R1;
  R1.parseEval("cat('Hello, R1\n')");
  RInside R2;
  R2.parseEval("cat('Hello, R2\n')");
  return 0;
}
然而,另一个成功创建RInside实例的实验的结果并不十分清楚

#include <RInside.h>

int main() {
  RInside *R1 = new RInside();
  R1->parseEval("cat('Hello, R1\n')");
  delete R1;
  RInside *R2 = new RInside();
  R2->parseEval("cat('Hello, R2\n')");
  delete R2;
  return 0;
}
R1析构函数调用是否足以正确清理清洗液?

——这是刚刚在rcpp-devel邮件列表中讨论的所有内容。简而言之,它不是ReND析构函数,而是RAPI API本身,RIN本身只是通过更容易使用的C++包提供的。p> 在该线程中,Simon清楚地指出,由于R本身有许多静态全局变量,因此不太可能进行修复

#include <RInside.h>

int main() {
  RInside *R1 = new RInside();
  R1->parseEval("cat('Hello, R1\n')");
  delete R1;
  RInside *R2 = new RInside();
  R2->parseEval("cat('Hello, R2\n')");
  delete R2;
  return 0;
}
Hello, R1
Lost warning messages