为什么复制的字符串被复制复制......?

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的责任.

字符串类型有这么类似的技巧吗?

For*_*veR 8

如果你可以使用,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)

stringconst char*back返回构造new c_str,只需删除c_str然后C++ 11编译器将调用move构造函数,而不是新的字符串构造.