局部变量 std::string s,中分配的用于真正存放str内容的空间是在栈上,还是在堆上?

auserpass 2019-05-06 09:14:06

using namespace std;
string subfunc()
{
string s=" very very long string ..... !!!!";
return s;
}

int main()
{
cout<<subfunc()<<endl;
return 0;
}

请问,在subfunc() 中的string s,在返回时,会不会发生 s 的内容复制,消耗额外资源?
换一种问法,局部变量 s,中分配的用于真正存放str内容的空间是在栈上,还是在堆上?
改为下面代码速度是否会有提升?

string * subfunc()
{
string *ps;

ps=new string;

*ps=" very very long string ..... !!!!";
return ps;
}

int main()
{
string *ps;
ps=subfunc();
cout<<*ps<<endl;
delete ps;
return 0;
}

...全文
380 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2019-05-06
  • 打赏
  • 举报
回复
string 是对char* 的封装,
void main()
{
string s; //s 在栈上,内部的char* 在堆上。
....
}
你二个函数返回string* ,不发生复制,但是需要你去管理的他的生存期,如果忘记了delete,就会有内存泄露。
wersdfadaf 2019-05-06
  • 打赏
  • 举报
回复
不同->不懂
lin5161678 2019-05-06
  • 打赏
  • 举报
回复
不管在栈还是堆 你这样修改都能提升性能的
伊航 2019-05-06
  • 打赏
  • 举报
回复
两个都没问题。一个是栈,一个是堆。

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧