a Ich habe folgende 2-Funktionen in C Angenommen ++:Pass eine C++ Objekt als Zeiger eine Wiederverwendung in einer anderen Funktion in RCPP
// [[Rcpp::export]]
SEXP foo() {
int a = 1;
Rcpp::XPtr<int> ptr(&a, true);
return ptr;
}
// [[Rcpp::export]]
int bar(SEXP a){
Rcpp::XPtr<int> x(a);
int b = *x;
return b;
}
ich so etwas wie die folgenden in R. anrufen können, wollen natürlich, ich könnte eine int
bis R in foo
, aber in meiner ursprünglichen Code in diesem Beispiel zurückkehren, ist a
eine etwas komplexe Datenstruktur, und ich wan't nur den Zeiger auf diese zurück, so kann sie von einem anderen C++ wiederverwendet werden Funktion genannt bar
a <- foo()
bar(a)
In diesem Beispiel habe ich erwartet, dass bar(a)
1 anstelle von 0 zurückgegeben hat. Wie kann ich das beheben?
Nizza. Obwohl es technisch gesehen auch ein Leck zeigt, gibt es kein 'a'. :) –
@DirkEddelbuettel Ich dachte 'XPtr' registriert einen Finalizer um das Objekt zu löschen? – cdeterman
Nur überprüft, und Sie haben Recht. Schönes Feature zu haben :) –