> so when the object returns from this as, a copy is involved. We return a > T, not a T*, or a T&
I wonder if this gets optimized away, though? E.g. http://blog.knatten.org/2011/08/26/dont-be-afraid-of-returning-by-value-know-the-return-value-optimization/ Definitely worth profiling and/or looking at the assembly before any hard manual optimization. Darren Fuller quoting, for context: > This is complicated. For the moment I think copies are involved often. > But we have opportunities to recognize that we don't need to make copies. > > For example : > > void foo( const SomeClass& x ) ; > > at the moment, in order to invoke the function, we essentially call : > > as<SomeClass> > > which goes down to : > > /** handling T such that T is exposed by a module */ > template <typename T> T as(SEXP x, > ::Rcpp::traits::r_type_module_object_tag ){ > T* obj = as_module_object<T>(x) ; > return *obj ; > } > > so when the object returns from this as, a copy is involved. We return a > T, not a T*, or a T& > > We might be able to identify that we want a reference. that is more work. > > It is worth making a few tests with some dummy classes that prints on > copy constructor to see how many times it is used, etc ... -- Darren Cook, Software Researcher/Developer http://dcook.org/work/ (About me and my work) http://dcook.org/blogs.html (My blogs and articles) _______________________________________________ Rcpp-devel mailing list [email protected] https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
