想象一下这个简单的代码片段:
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分配的责任交给被调用的函数。
字符串类型有这么简单的把戏吗?
发布于 2016-01-15 08:58:07
如果您可以使用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编译器将调用move构造函数,而不是新的字符串构造。
发布于 2016-01-15 09:55:39
在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这样的容器中处理内存管理是否是个好主意。
https://stackoverflow.com/questions/34807364
复制相似问题