Простой эксперимент показывает, что в каждый поток одновременно допускается только один экземпляр 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?