Le 15/11/12 01:02, Darren Cook a écrit :
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

Good point. Feel free to get started ;-)

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 ...




--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30

R Graph Gallery: http://gallery.r-enthusiasts.com
`- http://bit.ly/SweN1Z : SuperStorm Sandy

blog:            http://romainfrancois.blog.free.fr
|- http://bit.ly/RE6sYH : OOP with Rcpp modules
`- http://bit.ly/Thw7IK : Rcpp modules more flexible

_______________________________________________
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to