簡単な実験では、スレッドごとに一度に 1 つの RInside インスタンスのみが許可されることが示されています。
#include <RInside.h>
int main() {
RInside R1;
R1.parseEval("cat('Hello, R1\n')");
RInside R2;
R2.parseEval("cat('Hello, R2\n')");
return 0;
}
次の出力でプログラムがクラッシュします。
Hello, R1
terminate called after throwing an instance of 'std::runtime_error'
what(): can only have one RInside instance
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
ただし、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;
}
このプログラムは、R2 作成の瞬間にバズります。前の出力は次のようになります。
Hello, R1
Lost warning messages
R1 デストラクタ呼び出しは、適切な RInside クリーンアップに十分ではありませんか?