stl string 的内存分配

C++语言 码拜 9年前 (2016-04-18) 1137次浏览
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;
}
解决方案

20

    ta.push(str);  //   void push(const value_type& _Val)
虽然传的参数_Val是引用,实际上真正push操作的并不是引用,还是整个变量
再说,从这个定义来看    stack<string> ta;
栈里面保存的应该都是string,而不是string的引用

20

stack<string> 这个stack结构里的每个string元素又不是引用。
ta.push(str);  实际做了个copy操作。ta里创建了个新元素(或指派了个已经存在的元素),然后把str的内容copy给了这个元素。
所以没什么问题

20

push的时候会发生copy,调用copy构造函数。

40

全部容器提供的都是“value语意”而非“reference语意”。容器内进行元素的安插操作时,内部实施的是拷贝操作,置于容器内。因此STL容器的每一个元素都必须能够拷贝。

40

不会,push进去的str是这个临时对象的一个复制对象,所以这个str之后析构不会影响到它

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明stl string 的内存分配
喜欢 (0)
[1034331897@qq.com]
分享 (0)