当我们比较使用Pimpl与那些不使用pimpl实验(C++11/STL/Move vs. C++11/STL/Move/Pimpl,C++11/STL/Move/Opt vs. C++11/STL/Move/Pimpl/Opt),我们看到的是一个加速因子1.370到1.452 和缓慢的因素1.011到1.041。使用移动语义和Pimpl增速的幅度比慢造成的pimpl开销命令。如果我们的代码更倾向于shuffleandsort,其中浅拷贝支配深拷贝,我们的代码将最有可能从与Pimpl惯用法组合使用移动语义看全面提速。
幸运的是,在大多数情况下,在真正的代码中,浅副本占主导地位的深层副本。这个观察是必要的当QT项目决定在一开始使用Pimpl惯用法的所有非平凡的类。
如果我们比较使用STL和QT实验之间的Pimpl惯用法的开销(C++11/STL/Move/Pimpl vs. C++11/Qt/Move/Pimpl,C++11/STL/Move/Pimpl/Opt vs. C++11/Qt/Move/Pimpl/Opt)以下的图片出现。为阻挠,QT比STL慢1.06到1.30倍。原因是,cteam纯Qt版本使用pimpl的字符串m_name和双打m_statistics矢量。ShuffleAndSort,QT只是稍微快点(因子:1.008–1.014)比纯C++ 11 / STL。这个小的增速很可能是吃了更大的减速的pimpl开销造成的。
在前C + +的11倍,使用Qt的课给了我们一个速度的优势超过STL类大多数时候。事情有C++ 11的到来改变了。STL类现在看齐的Qt类–感谢移动语义的组合和Pimpl惯用法。纯C++ 11实施给我们更好地控制何时使用Pimpl惯用法时。用QT,我们一直用它–无论产量增速与否。