111*_*111 7 c++ move-semantics copy-elision c++11
我有一个函数,它产生一种昂贵的对象(包含向量和非固定大小的映射),所以我真的想避免调用copy c'tors.
到目前为止,我刚刚从方法中返回了一个std :: shared_ptr并使用了它,但我觉得它很难看,并且需要使用typedeffing才能真正使用它.
我知道有两件事可以帮助我.首先复制elision,第二个是移动语义.
我的问题是我知道如何正确使用.我的研究告诉我,复制省略完全由编译器完成,并不是st'd的一部分.我真的不想完全依赖于此.
那么我如何确保调用移动分配并确保它已到位以防止编译器复制elision.
ResultSet &&generateResults()
{
//ResultSet a(); :S
ResultSet a;
a.populat(...
//blah blah blah
return a;
}
//else where (where the && assignment operator is overloaded
ResultsSet b = generateResults();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这是最正确的编码方式吗?如果不是,我怎么能改进它.我很高兴使用C++ 0x only构造.
BTW:我的编译器是gcc 4.6
如果您不喜欢阅读,这里有一个关于右值和移动语义的视频链接: http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Stephan-T-Lavavej-Standard-模板库-STL-9-of-n
归档时间: |
|
查看次数: |
476 次 |
最近记录: |