想象一下这个简单的简化代码片段:
ostringstream os;
os << "hello world!";
string str = os.str().c_str(); // copy of os
list<string> lst;
lst.push_back(str); // copy of str
在WideString中有一个名为detach()的函数,它赋予被调用函数处理mem-allocation的责任。
字符串类型有这么类似的技巧吗?
答案 0 :(得分:8)
如果您可以使用C++11
,则可以使用move
。您可以在此处阅读有关移动语义的信息:What are move semantics?
lst.push_back(std::move(str)); // str is moved
但是在这里:
string str = os.str().c_str();
您从string
返回的const char*
构造新的c_str
,只需删除c_str
,然后C ++ 11编译器将调用移动构造函数,而不是新的字符串构造。
答案 1 :(得分:0)
在Qt库中有不同的拷贝写入方法。例如:
QString a = "Hello"; // Create string
QString b = a; // No copy, `b` has pointer to `a`
a += " world!"; // `b` is copied here, because `a` was modified
关于std::string
,C ++ 11尝试使用移动语义来解决这个问题。另一个问题可能是在QString
等容器中处理内存管理是个好主意。