stl string 的内存分配

plzzz 2016-06-07 03:43:28
str 应该属于局部变量, 这样的话 ta.push str 的引用值会不会有问题?相当于从局部函数返回一个引用

void foo(stack<string> &ta){
string str("abcdefg");
ta.push(str); // void push(const value_type& _Val)
}
int main(){
stack<string> ta;
foo(ta);
cout << move(ta.top()).c_str() << endl;
}
...全文
182 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2016-06-07
  • 打赏
  • 举报
回复
不会,push进去的str是这个临时对象的一个复制对象,所以这个str之后析构不会影响到它
小灸舞 2016-06-07
  • 打赏
  • 举报
回复
所有容器提供的都是“value语意”而非“reference语意”。容器内进行元素的安插操作时,内部实施的是拷贝操作,置于容器内。因此STL容器的每一个元素都必须能够拷贝。
ztenv 版主 2016-06-07
  • 打赏
  • 举报
回复
push的时候会发生copy,调用copy构造函数。
luciferisnotsatan 2016-06-07
  • 打赏
  • 举报
回复
stack<string> 这个stack结构里的每个string元素又不是引用。 ta.push(str); 实际做了个copy操作。ta里创建了个新元素(或指派了个已经存在的元素),然后把str的内容copy给了这个元素。 所以没什么问题
brookmill 2016-06-07
  • 打赏
  • 举报
回复
ta.push(str); // void push(const value_type& _Val) 虽然传的参数_Val是引用,实际上真正push操作的并不是引用,还是整个变量 再说,从这个定义来看 stack<string> ta; 栈里面保存的应该都是string,而不是string的引用

65,186

社区成员

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

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