首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rcpp与移动语义

Rcpp与移动语义
EN

Stack Overflow用户
提问于 2015-11-03 19:05:27
回答 1查看 243关注 0票数 5

我在C++中实现了一个算法,它作为输出返回一个庞大的元素数组。现在,我想在Rcpp中实现一个包装器,以便能够使用R调用这个函数。

我在Makevars文件中指定了以下设置:

PKG_CXXFLAGS = -std=c++11

所以我可以使用C++11版本。

代码语言:javascript
复制
// [[Rcpp::export]]
NumericMatrix compute(int width, int height)
{
  vector<data_t> weights(width * height);
  compute_weights(weights);

  NumericMatrix mat(height, width);
  copy(begin(weights), end(weights), mat.begin());

  return mat;
}

如果NumericMatrix在函数返回时被移动,则上述包装函数仍然有效,否则将创建一个新对象。

Rcpp是否利用移动语义?如果没有,有没有什么解决办法来避免副本的构造?

EN

回答 1

Stack Overflow用户

发布于 2020-05-29 06:32:56

如果NumericMatrix在函数返回时被移动,则上述包装函数仍然有效,否则将创建一个新对象。 ..。如果没有,有没有什么解决办法来避免副本的构造?

我认为复制构造函数只创建了一个浅拷贝,所以不应该有任何副本。见Rcpp: How to ensure deep copy of a NumericMatrix?

这个例子也证实了这一点。

代码语言:javascript
复制
#include <Rcpp.h>

// [[Rcpp::export]]
Rcpp::NumericVector allocate_the_vec(R_xlen_t n_ele){
  Rcpp::NumericVector out(n_ele);
  return out;
}

/*** R
# got 16 GB ram on my laptop. 3 x 7 is an issue but 2 x 7 is not
how_large <- as.integer(7 * 10^9 / 8)
the_large_vec_1 <- allocate_the_vec(how_large)
object.size(the_large_vec_1)
the_large_vec_2 <- allocate_the_vec(how_large)
*/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33507105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档