3 c++
想象一下这个简单的简化代码片段:
ostringstream os;
os << "hello world!";
string str = os.str().c_str(); // copy of os
list<string> lst;
lst.push_back(str); // copy of str
Run Code Online (Sandbox Code Playgroud)
在WideString中有一个名为detach()的函数,它赋予被调用函数处理mem-allocation的责任.
字符串类型有这么类似的技巧吗?
如果你可以使用,C++11你可以使用move.你可以在这里阅读关于移动语义的内容:什么是移动语义?
lst.push_back(std::move(str)); // str is moved
Run Code Online (Sandbox Code Playgroud)
但在这里:
string str = os.str().c_str();
Run Code Online (Sandbox Code Playgroud)
你string从const char*back返回构造new c_str,只需删除c_str然后C++ 11编译器将调用move构造函数,而不是新的字符串构造.