我正在研究Rcpp,遇到了一个有趣但很奇怪的问题。
本质上int *a = new int(1);
的工作方式与以下方式不同:
int b = 1;
int *a;
a = &b;
任何想法为何?完整代码如下。如果我取消注释int *a = new int(1);
,则下面的代码将按预期工作。
#include <Rcpp.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace Rcpp;
using namespace std;
// [[Rcpp::export]]
int bar(SEXP a) {
Rcpp::XPtr<int> ptr(a);
int b = *ptr;
cout << b;
return (b);
}
// [[Rcpp::export]]
SEXP foo() {
// int *a = new int(1);
int b = 1;
int *a;
a = &b;
cout << *a;
Rcpp::XPtr<int> ptr(a);
return ptr;
}
然后在R中:我希望得到b = 1
。
> a = foo()
1
> b = bar(a)
0
> b
[1] 0
================================================ =========================== 编辑: 我的问题实际上源自Pass a c++ object as a pointer an reuse in another function in Rcpp,但是当我希望在下面测试c样式的指针时
int b = 1;
int *a;
a = &b;
替换int *a = new int(1);
时,它根本无法按预期工作。这就是为什么我在这里问这个问题。