首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么要复制、复制、复制.?

为什么要复制、复制、复制.?
EN

Stack Overflow用户
提问于 2016-01-15 08:54:53
回答 2查看 140关注 0票数 3

想象一下这个简单的代码片段:

代码语言:javascript
复制
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分配的责任交给被调用的函数。

字符串类型有这么简单的把戏吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-15 08:58:07

如果您可以使用C++11,您可以只使用move。您可以在这里阅读有关移动语义的内容:What are move semantics?

代码语言:javascript
复制
lst.push_back(std::move(str)); // str is moved

但在这里:

代码语言:javascript
复制
string str = os.str().c_str();

您可以从从string返回的const char*中构造新的c_str,只需删除c_str,然后C++11编译器将调用move构造函数,而不是新的字符串构造。

票数 8
EN

Stack Overflow用户

发布于 2016-01-15 09:55:39

在Qt库中,在写方法上有不同的副本。例如:

代码语言:javascript
复制
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这样的容器中处理内存管理是否是个好主意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34807364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档