
std::string getstr(){ return "Hello";}std::string &&hello = getstr(); 我想到的另一种方式是使用共享指针.
std::tr1::shared_ptr<std::string> getstr(){ std::tr1::shared_ptr<std::string> hello(new std::string("Hello")); return hello;}auto hello = getstr(); 我在想,也许一个rvalue的参考是更好的,但我想在第一个意见先使用它之前.哪个更好?
还建议如果一个类中的字段不使用构造函数设置,那么这个字段是否会引用引用?例:
class StringHolder{ public: std::string &&str;};StringHolder sh;sh.str = getstr(); 非常感谢你们!
解决方法 这个问题可能会被重复.这是一个问题.不过,我也想回答.在C 11中,当您是像std :: string这样的对象的客户端时,应该通过值传递它,而不用担心效率:
std::string getstr(){ return "Hello";}std::string hello = getstr(); 在这个级别你不需要关心rvalue引用.只要知道std :: string可以非常有效地从rvalues(如getstr()的返回)中“复制”.这个“复制”实际上被称为“移动”,并且自动启用,因为您是从一个rvalue(匿名临时)复制.
不要尝试通过还原到引用计数来优化复制.如果您需要共享所有权语义,则仅使用引用计数.这个说法并不总是如此.但是,为了学习基础知识,这是一个很好的经验法则.
当您设计需要通过值传递的类时,您需要开始担心rvalue引用:
class Widget{ // pointer to heap datapublic: // ...}; 要简要介绍rvalue引用和移动语义,N2027是一个体面的教程. N2027太长了,不能粘贴在这里,但足够简单易读. std :: string遵循N2027中规定的基础,使您可以通过免费的内疚感来传递它.您可以按照Widget中相同的设计模式进行 *** 作.
总结以上是内存溢出为你收集整理的在C中返回一个对象全部内容,希望文章能够帮你解决在C中返回一个对象所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)