您的位置:首页 > 运维架构

Don't copy when you can swap

2009-09-12 20:55 211 查看
Recently I worked on a cpp code beatifier, it reads in a cpp file, analysis the content and beautify the format, then write the file back. In my code there's a function like this: void beautify_a_file(const string& cpp_file)
{
string content;
// load the content
{
ifstream ifs(cpp_file.c_str());
string tmp((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>());
content=tmp; // this is bad, two large strings are constructed and then tmp is destroied
} process(content); // write it back
{
ofstream ofs(cpp_file.c_str());
ofs<<content;
}
} Let's look at the line content=tmp; this is a very time consuming operation, for the string here could be really big. A better way is to use string::swap, the method interchange of the two string's buffer ownership and no time-onsuming buffer copy is involved. The fix: Change: content=tmp; to: content.swap(tmp); in <string> the std::swap is overloaded to be using string::swap, so you can also use: std::swap(content, tmp); Nearly all std containers have their own swap implementations, use them, instead of copy consructor!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐